Generated by Cython 0.29.30

Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.

Raw output: inference.c

+0001: from itertools import compress
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_compress);
  __Pyx_GIVEREF(__pyx_n_s_compress);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_compress);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_itertools, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_compress); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_compress, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_t_7 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_kp_u_SIR_type_infer_line_313, __pyx_kp_u_Compute_the_maximum_a_posterior) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_kp_u_SIR_type_infer_mcmc_line_658, __pyx_kp_u_Sample_the_posterior_distributi) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_kp_u_SIR_type_robustness_line_1272, __pyx_kp_u_Robustness_analysis_in_a_two_di) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_kp_u_SIR_type_latent_infer_line_1794, __pyx_kp_u_Compute_the_maximum_a_posterior_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_kp_u_SIR_type_latent_infer_mcmc_line, __pyx_kp_u_Sample_the_posterior_distributi_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_7) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0002: from scipy import sparse
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_sparse);
  __Pyx_GIVEREF(__pyx_n_s_sparse);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_sparse);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_scipy, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_sparse); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sparse, __pyx_t_2) < 0) __PYX_ERR(0, 2, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0003: from scipy.integrate import solve_ivp, quad
  __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_solve_ivp);
  __Pyx_GIVEREF(__pyx_n_s_solve_ivp);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_solve_ivp);
  __Pyx_INCREF(__pyx_n_s_quad);
  __Pyx_GIVEREF(__pyx_n_s_quad);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_quad);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_scipy_integrate, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_solve_ivp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_solve_ivp, __pyx_t_1) < 0) __PYX_ERR(0, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_quad); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_quad, __pyx_t_1) < 0) __PYX_ERR(0, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0004: from scipy.optimize import minimize, approx_fprime
  __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_minimize);
  __Pyx_GIVEREF(__pyx_n_s_minimize);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_minimize);
  __Pyx_INCREF(__pyx_n_s_approx_fprime);
  __Pyx_GIVEREF(__pyx_n_s_approx_fprime);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_approx_fprime);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_scipy_optimize, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_minimize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_minimize, __pyx_t_2) < 0) __PYX_ERR(0, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_approx_fprime); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_approx_fprime, __pyx_t_2) < 0) __PYX_ERR(0, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0005: from scipy.stats import lognorm
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_lognorm);
  __Pyx_GIVEREF(__pyx_n_s_lognorm);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_lognorm);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_scipy_stats, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_lognorm); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_lognorm, __pyx_t_1) < 0) __PYX_ERR(0, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0006: from scipy.linalg import solve_triangular, rq
  __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_solve_triangular);
  __Pyx_GIVEREF(__pyx_n_s_solve_triangular);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_solve_triangular);
  __Pyx_INCREF(__pyx_n_s_rq);
  __Pyx_GIVEREF(__pyx_n_s_rq);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_rq);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_scipy_linalg, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_solve_triangular); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_solve_triangular, __pyx_t_2) < 0) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_rq); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_rq, __pyx_t_2) < 0) __PYX_ERR(0, 6, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0007: import numpy as np
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 7, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0008: from scipy.interpolate import make_interp_spline
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_make_interp_spline);
  __Pyx_GIVEREF(__pyx_n_s_make_interp_spline);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_make_interp_spline);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_scipy_interpolate, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_make_interp_spline); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_interp_spline, __pyx_t_1) < 0) __PYX_ERR(0, 8, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0009: from scipy.linalg import eig
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_eig);
  __Pyx_GIVEREF(__pyx_n_s_eig);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_eig);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_scipy_linalg, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_eig); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_eig, __pyx_t_2) < 0) __PYX_ERR(0, 9, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0010: from scipy.stats import multivariate_normal
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_multivariate_normal);
  __Pyx_GIVEREF(__pyx_n_s_multivariate_normal);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_multivariate_normal);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_scipy_stats, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_multivariate_normal); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_multivariate_normal, __pyx_t_1) < 0) __PYX_ERR(0, 10, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0011: from scipy.linalg.lapack import dtrtri
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_dtrtri);
  __Pyx_GIVEREF(__pyx_n_s_dtrtri);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_dtrtri);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_scipy_linalg_lapack, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_dtrtri); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_dtrtri, __pyx_t_2) < 0) __PYX_ERR(0, 11, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0012: from scipy.linalg import cholesky
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_cholesky);
  __Pyx_GIVEREF(__pyx_n_s_cholesky);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_cholesky);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_scipy_linalg, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_cholesky); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_cholesky, __pyx_t_1) < 0) __PYX_ERR(0, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0013: cimport numpy as np
 0014: cimport cython
+0015: from math import isclose
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_isclose);
  __Pyx_GIVEREF(__pyx_n_s_isclose);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_isclose);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_math, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_isclose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_isclose, __pyx_t_2) < 0) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0016: import time, sympy
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_time, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_time, __pyx_t_1) < 0) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_sympy, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sympy, __pyx_t_1) < 0) __PYX_ERR(0, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0017: from sympy import MutableDenseNDimArray as Array
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_MutableDenseNDimArray);
  __Pyx_GIVEREF(__pyx_n_s_MutableDenseNDimArray);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_MutableDenseNDimArray);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_sympy, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_MutableDenseNDimArray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Array, __pyx_t_1) < 0) __PYX_ERR(0, 17, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0018: from sympy import Inverse, tensorcontraction, tensorproduct, permutedims
  __pyx_t_2 = PyList_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_Inverse);
  __Pyx_GIVEREF(__pyx_n_s_Inverse);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Inverse);
  __Pyx_INCREF(__pyx_n_s_tensorcontraction);
  __Pyx_GIVEREF(__pyx_n_s_tensorcontraction);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_tensorcontraction);
  __Pyx_INCREF(__pyx_n_s_tensorproduct);
  __Pyx_GIVEREF(__pyx_n_s_tensorproduct);
  PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_tensorproduct);
  __Pyx_INCREF(__pyx_n_s_permutedims);
  __Pyx_GIVEREF(__pyx_n_s_permutedims);
  PyList_SET_ITEM(__pyx_t_2, 3, __pyx_n_s_permutedims);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_sympy, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_Inverse); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Inverse, __pyx_t_2) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_tensorcontraction); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_tensorcontraction, __pyx_t_2) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_tensorproduct); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_tensorproduct, __pyx_t_2) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_permutedims); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_permutedims, __pyx_t_2) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0019: from scipy import interpolate
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_interpolate);
  __Pyx_GIVEREF(__pyx_n_s_interpolate);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_interpolate);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_scipy, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_interpolate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_interpolate, __pyx_t_1) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0020: import dill
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_dill, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_dill, __pyx_t_2) < 0) __PYX_ERR(0, 20, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0021: import hashlib
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_hashlib, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_hashlib, __pyx_t_2) < 0) __PYX_ERR(0, 21, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0022: 
+0023: try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L7_try_end;
    __pyx_L2_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L3_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    __pyx_L7_try_end:;
  }
 0024:     # Optional support for nested sampling.
+0025:     import dynesty
      __pyx_t_2 = __Pyx_Import(__pyx_n_s_dynesty, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 25, __pyx_L2_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_dynesty, __pyx_t_2) < 0) __PYX_ERR(0, 25, __pyx_L2_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0026: except ImportError:
    __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
    if (__pyx_t_6) {
      __Pyx_AddTraceback("pyross.inference", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(0, 26, __pyx_L4_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
+0027:     dynesty = None
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_dynesty, Py_None) < 0) __PYX_ERR(0, 27, __pyx_L4_except_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L3_exception_handled;
    }
    goto __pyx_L4_except_error;
    __pyx_L4_except_error:;
 0028: 
+0029: try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L15_try_end;
    __pyx_L10_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L11_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3);
    __pyx_L15_try_end:;
  }
 0030:     # Optional support for MCMC sampling.
+0031:     import emcee
      __pyx_t_7 = __Pyx_Import(__pyx_n_s_emcee, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 31, __pyx_L10_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_emcee, __pyx_t_7) < 0) __PYX_ERR(0, 31, __pyx_L10_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0032: except ImportError:
    __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
    if (__pyx_t_6) {
      __Pyx_AddTraceback("pyross.inference", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(0, 32, __pyx_L12_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_2);
+0033:     emcee = None
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_emcee, Py_None) < 0) __PYX_ERR(0, 33, __pyx_L12_except_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L11_exception_handled;
    }
    goto __pyx_L12_except_error;
    __pyx_L12_except_error:;
 0034: 
+0035: try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L23_try_end;
    __pyx_L18_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L19_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    __pyx_L23_try_end:;
  }
 0036:     # Optional support for multiprocessing in the minimization function.
+0037:     import pathos.multiprocessing as pathos_mp
      __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L18_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_n_s__76);
      __Pyx_GIVEREF(__pyx_n_s__76);
      PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s__76);
      __pyx_t_1 = __Pyx_Import(__pyx_n_s_pathos_multiprocessing, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L18_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_pathos_mp, __pyx_t_1) < 0) __PYX_ERR(0, 37, __pyx_L18_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0038: except ImportError:
    __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
    if (__pyx_t_6) {
      __Pyx_AddTraceback("pyross.inference", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_7) < 0) __PYX_ERR(0, 38, __pyx_L20_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_7);
+0039:     pathos_mp = None
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_pathos_mp, Py_None) < 0) __PYX_ERR(0, 39, __pyx_L20_except_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L19_exception_handled;
    }
    goto __pyx_L20_except_error;
    __pyx_L20_except_error:;
 0040: 
+0041: import pyross.deterministic
  __pyx_t_7 = __Pyx_Import(__pyx_n_s_pyross_deterministic, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyross, __pyx_t_7) < 0) __PYX_ERR(0, 41, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 0042: cimport pyross.deterministic
+0043: import pyross.contactMatrix
  __pyx_t_7 = __Pyx_Import(__pyx_n_s_pyross_contactMatrix, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyross, __pyx_t_7) < 0) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0044: from pyross.utils_python import *
  __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_INCREF(__pyx_n_s__76);
  __Pyx_GIVEREF(__pyx_n_s__76);
  PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_s__76);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_pyross_utils_python, __pyx_t_7, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__pyx_import_star(__pyx_t_2) < 0) __PYX_ERR(0, 44, __pyx_L1_error);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0045: from libc.math cimport sqrt, log, INFINITY
+0046: cdef double PI = 3.14159265359
  __pyx_v_6pyross_9inference_PI = 3.14159265359;
 0047: 
 0048: 
+0049: DTYPE   = np.float
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DTYPE, __pyx_t_7) < 0) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0050: ctypedef np.float_t DTYPE_t
typedef __pyx_t_5numpy_float_t __pyx_t_6pyross_9inference_DTYPE_t;
 0051: ctypedef np.uint8_t BOOL_t
 0052: 
+0053: class MaxIntegratorStepsException(Exception):
  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_INCREF(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
  __Pyx_GIVEREF(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
  PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_7, __pyx_n_s_MaxIntegratorStepsException, __pyx_n_s_MaxIntegratorStepsException, (PyObject *) NULL, __pyx_n_s_pyross_inference, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
/* … */
  __pyx_t_8 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_MaxIntegratorStepsException, __pyx_t_7, __pyx_t_1, NULL, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MaxIntegratorStepsException, __pyx_t_8) < 0) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0054:     def __init__(self, message='Maximum number of integrator steps reached'):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_27MaxIntegratorStepsException_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6pyross_9inference_27MaxIntegratorStepsException_1__init__ = {"__init__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6pyross_9inference_27MaxIntegratorStepsException_1__init__, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pyross_9inference_27MaxIntegratorStepsException_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_message = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_message,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)((PyObject*)__pyx_kp_u_Maximum_number_of_integrator_ste));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_message);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 54, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    __pyx_v_message = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 54, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.MaxIntegratorStepsException.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_27MaxIntegratorStepsException___init__(__pyx_self, __pyx_v_self, __pyx_v_message);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_27MaxIntegratorStepsException___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_message) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyross.inference.MaxIntegratorStepsException.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__77 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_message); if (unlikely(!__pyx_tuple__77)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__77);
  __Pyx_GIVEREF(__pyx_tuple__77);
  __pyx_codeobj__78 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__77, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyross_inference_pyx, __pyx_n_s_init, 54, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__78)) __PYX_ERR(0, 54, __pyx_L1_error)
/* … */
  __pyx_t_8 = __Pyx_CyFunction_New(&__pyx_mdef_6pyross_9inference_27MaxIntegratorStepsException_1__init__, 0, __pyx_n_s_MaxIntegratorStepsException___in, NULL, __pyx_n_s_pyross_inference, __pyx_d, ((PyObject *)__pyx_codeobj__78)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_8, __pyx_tuple__79);
  if (__Pyx_SetNameInClass(__pyx_t_1, __pyx_n_s_init, __pyx_t_8) < 0) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_tuple__79 = PyTuple_Pack(1, ((PyObject*)__pyx_kp_u_Maximum_number_of_integrator_ste)); if (unlikely(!__pyx_tuple__79)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__79);
  __Pyx_GIVEREF(__pyx_tuple__79);
+0055:         super(MaxIntegratorStepsException, self).__init__(message)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_MaxIntegratorStepsException); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __Pyx_INCREF(__pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_init); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_message) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_message);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0056: 
 0057: @cython.wraparound(False)
 0058: @cython.boundscheck(False)
 0059: @cython.cdivision(True)
 0060: @cython.nonecheck(False)
+0061: cdef class SIR_type:
struct __pyx_obj_6pyross_9inference_SIR_type {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pyross_9inference_SIR_type *__pyx_vtab;
  Py_ssize_t nClass;
  Py_ssize_t M;
  Py_ssize_t steps;
  Py_ssize_t dim;
  Py_ssize_t vec_size;
  double Omega;
  double rtol_det;
  double rtol_lyapunov;
  long max_steps_det;
  long max_steps_lyapunov;
  long integrator_step_count;
  PyArrayObject *beta;
  PyArrayObject *gIa;
  PyArrayObject *gIs;
  PyArrayObject *fsa;
  PyArrayObject *_xm;
  PyArrayObject *alpha;
  PyArrayObject *fi;
  PyArrayObject *CM;
  PyArrayObject *dsigmadt;
  PyArrayObject *J;
  PyArrayObject *B;
  PyArrayObject *J_mat;
  PyArrayObject *B_vec;
  PyArrayObject *U;
  PyArrayObject *flat_indices1;
  PyArrayObject *flat_indices2;
  PyArrayObject *flat_indices;
  PyArrayObject *rows;
  PyArrayObject *cols;
  PyObject *det_method;
  PyObject *lyapunov_method;
  PyObject *class_index_dict;
  PyObject *param_keys;
  PyObject *_interp;
  PyObject *contactMatrix;
  int param_mapping_enabled;
};
/* … */
struct __pyx_vtabstruct_6pyross_9inference_SIR_type {
  PyArrayObject *(*_get_r_from_x)(struct __pyx_obj_6pyross_9inference_SIR_type *, PyArrayObject *);
  double (*_penalty_from_negative_values)(struct __pyx_obj_6pyross_9inference_SIR_type *, PyArrayObject *);
  PyObject *(*find_fastest_growing_lin_mode)(struct __pyx_obj_6pyross_9inference_SIR_type *, double, int __pyx_skip_dispatch);
  double (*_obtain_logp_for_traj)(struct __pyx_obj_6pyross_9inference_SIR_type *, __Pyx_memviewslice, double, struct __pyx_opt_args_6pyross_9inference_8SIR_type__obtain_logp_for_traj *__pyx_optional_args);
  double (*_obtain_logp_for_lat_traj)(struct __pyx_obj_6pyross_9inference_SIR_type *, __Pyx_memviewslice, __Pyx_memviewslice, PyArrayObject *, double, struct __pyx_opt_args_6pyross_9inference_8SIR_type__obtain_logp_for_lat_traj *__pyx_optional_args);
  double (*_obtain_square_dev_for_lat_traj)(struct __pyx_obj_6pyross_9inference_SIR_type *, __Pyx_memviewslice, __Pyx_memviewslice, PyArrayObject *, double);
  double (*_obtain_square_dev_for_lat_traj_diff)(struct __pyx_obj_6pyross_9inference_SIR_type *, __Pyx_memviewslice, __Pyx_memviewslice, PyArrayObject *, double);
  double (*_obtain_logp_for_traj_tangent)(struct __pyx_obj_6pyross_9inference_SIR_type *, __Pyx_memviewslice, double);
  double (*_log_cond_p)(struct __pyx_obj_6pyross_9inference_SIR_type *, __Pyx_memviewslice, __Pyx_memviewslice);
  PyObject *(*_estimate_cond_cov)(struct __pyx_obj_6pyross_9inference_SIR_type *, PyObject *, double, double);
  PyObject *(*obtain_full_mean_cov)(struct __pyx_obj_6pyross_9inference_SIR_type *, __Pyx_memviewslice, double, Py_ssize_t, int __pyx_skip_dispatch, struct __pyx_opt_args_6pyross_9inference_8SIR_type_obtain_full_mean_cov *__pyx_optional_args);
  PyObject *(*interpolate_euler)(struct __pyx_obj_6pyross_9inference_SIR_type *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*obtain_full_mean_cov_tangent_space)(struct __pyx_obj_6pyross_9inference_SIR_type *, __Pyx_memviewslice, double, Py_ssize_t, int __pyx_skip_dispatch, struct __pyx_opt_args_6pyross_9inference_8SIR_type_obtain_full_mean_cov_tangent_space *__pyx_optional_args);
  PyObject *(*_rhs0)(struct __pyx_obj_6pyross_9inference_SIR_type *, PyObject *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*_obtain_time_evol_op_2)(struct __pyx_obj_6pyross_9inference_SIR_type *, PyObject *, double, double, int __pyx_skip_dispatch);
  PyObject *(*_compute_dsigdt)(struct __pyx_obj_6pyross_9inference_SIR_type *, __Pyx_memviewslice);
  PyObject *(*convert_vec_to_mat)(struct __pyx_obj_6pyross_9inference_SIR_type *, __Pyx_memviewslice, int __pyx_skip_dispatch);
  PyObject *(*compute_jacobian_and_b_matrix)(struct __pyx_obj_6pyross_9inference_SIR_type *, __Pyx_memviewslice, double, struct __pyx_opt_args_6pyross_9inference_8SIR_type_compute_jacobian_and_b_matrix *__pyx_optional_args);
};
static struct __pyx_vtabstruct_6pyross_9inference_SIR_type *__pyx_vtabptr_6pyross_9inference_SIR_type;

 0062:     """Parent class for inference for all SIR-type classes listed below
 0063: 
 0064:     All subclasses use the same functions to perform inference, which are documented below.
 0065:     """
 0066: 
 0067:     cdef:
+0068:         readonly Py_ssize_t nClass, M, steps, dim, vec_size
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_6nClass_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_6nClass_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_6nClass___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_6nClass___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->nClass); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.nClass.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_1M_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_1M_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_1M___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_1M___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->M); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.M.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_5steps_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_5steps_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_5steps___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_5steps___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->steps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.steps.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_3dim_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_3dim_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_3dim___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_3dim___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.dim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_8vec_size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_8vec_size_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_8vec_size___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_8vec_size___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->vec_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.vec_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0069:         readonly double Omega, rtol_det, rtol_lyapunov
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_5Omega_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_5Omega_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_5Omega___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_5Omega___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->Omega); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.Omega.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_8rtol_det_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_8rtol_det_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_8rtol_det___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_8rtol_det___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->rtol_det); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.rtol_det.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_13rtol_lyapunov_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_13rtol_lyapunov_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_13rtol_lyapunov___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_13rtol_lyapunov___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->rtol_lyapunov); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.rtol_lyapunov.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0070:         readonly long max_steps_det, max_steps_lyapunov, integrator_step_count
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_13max_steps_det_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_13max_steps_det_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_13max_steps_det___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_13max_steps_det___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_self->max_steps_det); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.max_steps_det.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_18max_steps_lyapunov_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_18max_steps_lyapunov_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_18max_steps_lyapunov___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_18max_steps_lyapunov___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_self->max_steps_lyapunov); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.max_steps_lyapunov.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_21integrator_step_count_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_21integrator_step_count_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_21integrator_step_count___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_21integrator_step_count___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_self->integrator_step_count); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.integrator_step_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0071:         readonly np.ndarray beta, gIa, gIs, fsa, _xm
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_4beta_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_4beta_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_4beta___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_4beta___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->beta));
  __pyx_r = ((PyObject *)__pyx_v_self->beta);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_3gIa_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_3gIa_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_3gIa___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_3gIa___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->gIa));
  __pyx_r = ((PyObject *)__pyx_v_self->gIa);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_3gIs_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_3gIs_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_3gIs___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_3gIs___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->gIs));
  __pyx_r = ((PyObject *)__pyx_v_self->gIs);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_3fsa_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_3fsa_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_3fsa___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_3fsa___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->fsa));
  __pyx_r = ((PyObject *)__pyx_v_self->fsa);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_3_xm_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_3_xm_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_3_xm___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_3_xm___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->_xm));
  __pyx_r = ((PyObject *)__pyx_v_self->_xm);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0072:         readonly np.ndarray alpha, fi, CM, dsigmadt, J, B, J_mat, B_vec, U
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_5alpha_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_5alpha_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_5alpha___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_5alpha___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->alpha));
  __pyx_r = ((PyObject *)__pyx_v_self->alpha);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_2fi_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_2fi_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_2fi___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_2fi___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->fi));
  __pyx_r = ((PyObject *)__pyx_v_self->fi);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_2CM_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_2CM_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_2CM___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_2CM___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->CM));
  __pyx_r = ((PyObject *)__pyx_v_self->CM);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_8dsigmadt_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_8dsigmadt_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_8dsigmadt___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_8dsigmadt___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->dsigmadt));
  __pyx_r = ((PyObject *)__pyx_v_self->dsigmadt);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_1J_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_1J_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_1J___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_1J___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->J));
  __pyx_r = ((PyObject *)__pyx_v_self->J);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_1B_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_1B_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_1B___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_1B___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->B));
  __pyx_r = ((PyObject *)__pyx_v_self->B);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_5J_mat_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_5J_mat_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_5J_mat___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_5J_mat___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->J_mat));
  __pyx_r = ((PyObject *)__pyx_v_self->J_mat);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_5B_vec_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_5B_vec_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_5B_vec___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_5B_vec___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->B_vec));
  __pyx_r = ((PyObject *)__pyx_v_self->B_vec);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_1U_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_1U_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_1U___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_1U___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->U));
  __pyx_r = ((PyObject *)__pyx_v_self->U);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0073:         readonly np.ndarray flat_indices1, flat_indices2, flat_indices, rows, cols
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_13flat_indices1_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_13flat_indices1_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_13flat_indices1___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_13flat_indices1___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->flat_indices1));
  __pyx_r = ((PyObject *)__pyx_v_self->flat_indices1);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_13flat_indices2_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_13flat_indices2_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_13flat_indices2___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_13flat_indices2___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->flat_indices2));
  __pyx_r = ((PyObject *)__pyx_v_self->flat_indices2);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_12flat_indices_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_12flat_indices_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_12flat_indices___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_12flat_indices___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->flat_indices));
  __pyx_r = ((PyObject *)__pyx_v_self->flat_indices);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_4rows_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_4rows_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_4rows___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_4rows___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->rows));
  __pyx_r = ((PyObject *)__pyx_v_self->rows);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_4cols_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_4cols_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_4cols___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_4cols___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->cols));
  __pyx_r = ((PyObject *)__pyx_v_self->cols);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0074:         readonly str det_method, lyapunov_method
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_10det_method_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_10det_method_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_10det_method___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_10det_method___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->det_method);
  __pyx_r = __pyx_v_self->det_method;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_15lyapunov_method_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_15lyapunov_method_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_15lyapunov_method___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_15lyapunov_method___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->lyapunov_method);
  __pyx_r = __pyx_v_self->lyapunov_method;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0075:         readonly dict class_index_dict
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_16class_index_dict_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_16class_index_dict_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_16class_index_dict___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_16class_index_dict___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->class_index_dict);
  __pyx_r = __pyx_v_self->class_index_dict;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0076:         readonly list param_keys, _interp
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_10param_keys_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_10param_keys_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_10param_keys___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_10param_keys___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->param_keys);
  __pyx_r = __pyx_v_self->param_keys;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_7_interp_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_7_interp_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_7_interp___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_7_interp___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_interp);
  __pyx_r = __pyx_v_self->_interp;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0077:         readonly object contactMatrix
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_13contactMatrix_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_13contactMatrix_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_13contactMatrix___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_13contactMatrix___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->contactMatrix);
  __pyx_r = __pyx_v_self->contactMatrix;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0078:         readonly bint param_mapping_enabled
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_21param_mapping_enabled_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_21param_mapping_enabled_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_21param_mapping_enabled___get__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_21param_mapping_enabled___get__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->param_mapping_enabled); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.param_mapping_enabled.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0079: 
+0080:     def __init__(self, parameters, nClass, M, fi, Omega, steps, det_method, lyapunov_method, rtol_det, rtol_lyapunov, max_steps_det, max_steps_lyapunov):
/* Python wrapper */
static int __pyx_pw_6pyross_9inference_8SIR_type_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6pyross_9inference_8SIR_type_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_parameters = 0;
  PyObject *__pyx_v_nClass = 0;
  PyObject *__pyx_v_M = 0;
  PyObject *__pyx_v_fi = 0;
  PyObject *__pyx_v_Omega = 0;
  PyObject *__pyx_v_steps = 0;
  PyObject *__pyx_v_det_method = 0;
  PyObject *__pyx_v_lyapunov_method = 0;
  PyObject *__pyx_v_rtol_det = 0;
  PyObject *__pyx_v_rtol_lyapunov = 0;
  PyObject *__pyx_v_max_steps_det = 0;
  PyObject *__pyx_v_max_steps_lyapunov = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_parameters,&__pyx_n_s_nClass,&__pyx_n_s_M,&__pyx_n_s_fi,&__pyx_n_s_Omega,&__pyx_n_s_steps,&__pyx_n_s_det_method,&__pyx_n_s_lyapunov_method,&__pyx_n_s_rtol_det,&__pyx_n_s_rtol_lyapunov,&__pyx_n_s_max_steps_det,&__pyx_n_s_max_steps_lyapunov,0};
    PyObject* values[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_parameters)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nClass)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 12, 12, 1); __PYX_ERR(0, 80, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 12, 12, 2); __PYX_ERR(0, 80, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fi)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 12, 12, 3); __PYX_ERR(0, 80, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Omega)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 12, 12, 4); __PYX_ERR(0, 80, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_steps)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 12, 12, 5); __PYX_ERR(0, 80, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_det_method)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 12, 12, 6); __PYX_ERR(0, 80, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lyapunov_method)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 12, 12, 7); __PYX_ERR(0, 80, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol_det)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 12, 12, 8); __PYX_ERR(0, 80, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol_lyapunov)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 12, 12, 9); __PYX_ERR(0, 80, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps_det)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 12, 12, 10); __PYX_ERR(0, 80, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps_lyapunov)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 12, 12, 11); __PYX_ERR(0, 80, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 80, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 12) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
      values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
      values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
      values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
      values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
      values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
    }
    __pyx_v_parameters = values[0];
    __pyx_v_nClass = values[1];
    __pyx_v_M = values[2];
    __pyx_v_fi = values[3];
    __pyx_v_Omega = values[4];
    __pyx_v_steps = values[5];
    __pyx_v_det_method = values[6];
    __pyx_v_lyapunov_method = values[7];
    __pyx_v_rtol_det = values[8];
    __pyx_v_rtol_lyapunov = values[9];
    __pyx_v_max_steps_det = values[10];
    __pyx_v_max_steps_lyapunov = values[11];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 12, 12, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 80, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type___init__(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_parameters, __pyx_v_nClass, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6pyross_9inference_8SIR_type___init__(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_parameters, PyObject *__pyx_v_nClass, PyObject *__pyx_v_M, PyObject *__pyx_v_fi, PyObject *__pyx_v_Omega, PyObject *__pyx_v_steps, PyObject *__pyx_v_det_method, PyObject *__pyx_v_lyapunov_method, PyObject *__pyx_v_rtol_det, PyObject *__pyx_v_rtol_lyapunov, PyObject *__pyx_v_max_steps_det, PyObject *__pyx_v_max_steps_lyapunov) {
  PyObject *__pyx_v_r = NULL;
  PyObject *__pyx_v_c = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("pyross.inference.SIR_type.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_r);
  __Pyx_XDECREF(__pyx_v_c);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0081:         self.Omega = Omega
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_Omega); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 81, __pyx_L1_error)
  __pyx_v_self->Omega = __pyx_t_1;
+0082:         self.M = M
  __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_v_M); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L1_error)
  __pyx_v_self->M = __pyx_t_2;
+0083:         self.fi = fi
  if (!(likely(((__pyx_v_fi) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_fi, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 83, __pyx_L1_error)
  __pyx_t_3 = __pyx_v_fi;
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->fi);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->fi));
  __pyx_v_self->fi = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
+0084:         assert steps >= 2, 'Number of steps must be at least 2'
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_3 = PyObject_RichCompare(__pyx_v_steps, __pyx_int_2, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 84, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 84, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_4)) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Number_of_steps_must_be_at_least);
      __PYX_ERR(0, 84, __pyx_L1_error)
    }
  }
  #endif
+0085:         self.steps = steps
  __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_v_steps); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 85, __pyx_L1_error)
  __pyx_v_self->steps = __pyx_t_2;
+0086:         self.set_params(parameters)
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_params); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 86, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_parameters);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 86, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0087:         self.det_method=det_method
  if (!(likely(PyUnicode_CheckExact(__pyx_v_det_method))||((__pyx_v_det_method) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_det_method)->tp_name), 0))) __PYX_ERR(0, 87, __pyx_L1_error)
  __pyx_t_3 = __pyx_v_det_method;
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->det_method);
  __Pyx_DECREF(__pyx_v_self->det_method);
  __pyx_v_self->det_method = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+0088:         self.lyapunov_method=lyapunov_method
  if (!(likely(PyUnicode_CheckExact(__pyx_v_lyapunov_method))||((__pyx_v_lyapunov_method) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_lyapunov_method)->tp_name), 0))) __PYX_ERR(0, 88, __pyx_L1_error)
  __pyx_t_3 = __pyx_v_lyapunov_method;
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->lyapunov_method);
  __Pyx_DECREF(__pyx_v_self->lyapunov_method);
  __pyx_v_self->lyapunov_method = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+0089:         self.rtol_det = rtol_det
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_rtol_det); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 89, __pyx_L1_error)
  __pyx_v_self->rtol_det = __pyx_t_1;
+0090:         self.rtol_lyapunov = rtol_lyapunov
  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_rtol_lyapunov); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 90, __pyx_L1_error)
  __pyx_v_self->rtol_lyapunov = __pyx_t_1;
+0091:         self.max_steps_det = max_steps_det
  __pyx_t_7 = __Pyx_PyInt_As_long(__pyx_v_max_steps_det); if (unlikely((__pyx_t_7 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 91, __pyx_L1_error)
  __pyx_v_self->max_steps_det = __pyx_t_7;
+0092:         self.max_steps_lyapunov = max_steps_lyapunov
  __pyx_t_7 = __Pyx_PyInt_As_long(__pyx_v_max_steps_lyapunov); if (unlikely((__pyx_t_7 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 92, __pyx_L1_error)
  __pyx_v_self->max_steps_lyapunov = __pyx_t_7;
 0093: 
+0094:         self.dim = nClass*M
  __pyx_t_3 = PyNumber_Multiply(__pyx_v_nClass, __pyx_v_M); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 94, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_self->dim = __pyx_t_2;
+0095:         self.nClass = nClass
  __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_v_nClass); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 95, __pyx_L1_error)
  __pyx_v_self->nClass = __pyx_t_2;
+0096:         self.vec_size = int(self.dim*(self.dim+1)/2)
  __pyx_v_self->vec_size = ((__pyx_v_self->dim * (__pyx_v_self->dim + 1)) / 2);
+0097:         self.CM = np.empty((M, M), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 97, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 97, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 97, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_M);
  __Pyx_GIVEREF(__pyx_v_M);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_M);
  __Pyx_INCREF(__pyx_v_M);
  __Pyx_GIVEREF(__pyx_v_M);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_M);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 97, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 97, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 97, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 97, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 97, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 97, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_8);
  __Pyx_GOTREF(__pyx_v_self->CM);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->CM));
  __pyx_v_self->CM = ((PyArrayObject *)__pyx_t_8);
  __pyx_t_8 = 0;
+0098:         self.dsigmadt = np.zeros((self.vec_size), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 98, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 98, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_self->vec_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 98, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_8);
  __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 98, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 98, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 98, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 98, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 98, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_5);
  __Pyx_GOTREF(__pyx_v_self->dsigmadt);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->dsigmadt));
  __pyx_v_self->dsigmadt = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
+0099:         self.J = np.zeros((nClass, M, nClass, M), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 99, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 99, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 99, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_nClass);
  __Pyx_GIVEREF(__pyx_v_nClass);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_nClass);
  __Pyx_INCREF(__pyx_v_M);
  __Pyx_GIVEREF(__pyx_v_M);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_M);
  __Pyx_INCREF(__pyx_v_nClass);
  __Pyx_GIVEREF(__pyx_v_nClass);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_nClass);
  __Pyx_INCREF(__pyx_v_M);
  __Pyx_GIVEREF(__pyx_v_M);
  PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_v_M);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 99, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 99, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 99, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 99, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 99, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 99, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->J);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->J));
  __pyx_v_self->J = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
+0100:         self.B = np.zeros((nClass, M, nClass, M), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_nClass);
  __Pyx_GIVEREF(__pyx_v_nClass);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_nClass);
  __Pyx_INCREF(__pyx_v_M);
  __Pyx_GIVEREF(__pyx_v_M);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_M);
  __Pyx_INCREF(__pyx_v_nClass);
  __Pyx_GIVEREF(__pyx_v_nClass);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_nClass);
  __Pyx_INCREF(__pyx_v_M);
  __Pyx_GIVEREF(__pyx_v_M);
  PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_M);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 100, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 100, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_8);
  __Pyx_GOTREF(__pyx_v_self->B);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->B));
  __pyx_v_self->B = ((PyArrayObject *)__pyx_t_8);
  __pyx_t_8 = 0;
+0101:         self.J_mat = np.empty((self.dim, self.dim), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
  __pyx_t_8 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 101, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 101, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_8);
  __Pyx_GOTREF(__pyx_v_self->J_mat);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->J_mat));
  __pyx_v_self->J_mat = ((PyArrayObject *)__pyx_t_8);
  __pyx_t_8 = 0;
+0102:         self.B_vec = np.empty((self.vec_size), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_self->vec_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_8);
  __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->B_vec);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->B_vec));
  __pyx_v_self->B_vec = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
+0103:         self.U = np.empty((self.dim, self.dim), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
  __pyx_t_3 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 103, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 103, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->U);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->U));
  __pyx_v_self->U = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
 0104: 
 0105:         # preparing the indices
+0106:         self.rows, self.cols = np.triu_indices(self.dim)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 106, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_triu_indices); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 106, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 106, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_8 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_3 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_8, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 106, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 106, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_6 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_5);
    #else
    __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 106, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 106, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_8 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 106, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext;
    index = 0; __pyx_t_6 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_6);
    index = 1; __pyx_t_5 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) __PYX_ERR(0, 106, __pyx_L1_error)
    __pyx_t_9 = NULL;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_9 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 106, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 106, __pyx_L1_error)
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 106, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_6);
  __Pyx_GOTREF(__pyx_v_self->rows);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->rows));
  __pyx_v_self->rows = ((PyArrayObject *)__pyx_t_6);
  __pyx_t_6 = 0;
  __Pyx_GIVEREF(__pyx_t_5);
  __Pyx_GOTREF(__pyx_v_self->cols);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->cols));
  __pyx_v_self->cols = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
+0107:         self.flat_indices = np.ravel_multi_index((self.rows, self.cols), (self.dim, self.dim))
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ravel_multi_index); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->rows));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->rows));
  PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_self->rows));
  __Pyx_INCREF(((PyObject *)__pyx_v_self->cols));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->cols));
  PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_v_self->cols));
  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_10 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_10);
  __pyx_t_8 = 0;
  __pyx_t_10 = 0;
  __pyx_t_10 = NULL;
  __pyx_t_12 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_12 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_5, __pyx_t_11};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 107, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_5, __pyx_t_11};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 107, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 107, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_10) {
      __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_10); __pyx_t_10 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_12, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_12, __pyx_t_11);
    __pyx_t_5 = 0;
    __pyx_t_11 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 107, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 107, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->flat_indices);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->flat_indices));
  __pyx_v_self->flat_indices = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
+0108:         r, c = np.triu_indices(self.dim, k=1)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_triu_indices); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_k, __pyx_int_1) < 0) __PYX_ERR(0, 108, __pyx_L1_error)
  __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, __pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_11))) || (PyList_CheckExact(__pyx_t_11))) {
    PyObject* sequence = __pyx_t_11;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 108, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_8);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 108, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 108, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    #endif
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_6 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 108, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_9 = Py_TYPE(__pyx_t_6)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_9(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_8 = __pyx_t_9(__pyx_t_6); if (unlikely(!__pyx_t_8)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_8);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_6), 2) < 0) __PYX_ERR(0, 108, __pyx_L1_error)
    __pyx_t_9 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_9 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 108, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  __pyx_v_r = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_c = __pyx_t_8;
  __pyx_t_8 = 0;
+0109:         self.flat_indices1 = np.ravel_multi_index((r, c), (self.dim, self.dim))
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_ravel_multi_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_INCREF(__pyx_v_r);
  __Pyx_GIVEREF(__pyx_v_r);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_r);
  __Pyx_INCREF(__pyx_v_c);
  __Pyx_GIVEREF(__pyx_v_c);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_c);
  __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_5);
  __pyx_t_6 = 0;
  __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  __pyx_t_12 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_12 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_8, __pyx_t_10};
    __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 109, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_8, __pyx_t_10};
    __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 109, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_12, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_12, __pyx_t_10);
    __pyx_t_8 = 0;
    __pyx_t_10 = 0;
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 109, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 109, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_11);
  __Pyx_GOTREF(__pyx_v_self->flat_indices1);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->flat_indices1));
  __pyx_v_self->flat_indices1 = ((PyArrayObject *)__pyx_t_11);
  __pyx_t_11 = 0;
+0110:         self.flat_indices2 = np.ravel_multi_index((c, r), (self.dim, self.dim))
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ravel_multi_index); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_c);
  __Pyx_GIVEREF(__pyx_v_c);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_c);
  __Pyx_INCREF(__pyx_v_r);
  __Pyx_GIVEREF(__pyx_v_r);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_r);
  __pyx_t_10 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_8);
  __pyx_t_10 = 0;
  __pyx_t_8 = 0;
  __pyx_t_8 = NULL;
  __pyx_t_12 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_12 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_3, __pyx_t_5};
    __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 110, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_3, __pyx_t_5};
    __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 110, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  {
    __pyx_t_10 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 110, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__pyx_t_8) {
      __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_12, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_12, __pyx_t_5);
    __pyx_t_3 = 0;
    __pyx_t_5 = 0;
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_10, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 110, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 110, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_11);
  __Pyx_GOTREF(__pyx_v_self->flat_indices2);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->flat_indices2));
  __pyx_v_self->flat_indices2 = ((PyArrayObject *)__pyx_t_11);
  __pyx_t_11 = 0;
 0111: 
+0112:         self._xm = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_xm);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->_xm));
  __pyx_v_self->_xm = ((PyArrayObject *)Py_None);
+0113:         self._interp = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_interp);
  __Pyx_DECREF(__pyx_v_self->_interp);
  __pyx_v_self->_interp = ((PyObject*)Py_None);
 0114: 
+0115:         self.param_mapping_enabled = False
  __pyx_v_self->param_mapping_enabled = 0;
 0116: 
 0117: 
+0118:     def infer_parameters(self, x, Tf, contactMatrix, prior_dict, **kwargs):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_3infer_parameters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_2infer_parameters[] = "Infers the MAP estimates for epidemiological parameters\n\n        Parameters\n        ----------\n            see `infer`\n\n        Returns\n        -------\n        output: dict\n            Contains the following keys for users:\n\n            map_dict: dict\n                A dictionary for MAPs. Keys are the names of the parameters and\n                the corresponding values are its MAP estimates.\n            -logp: float\n                The value of -logp at MAP.\n\n        Note\n        ----\n        This function just calls `infer` with a fixed contactMatrix function, will be deprecated.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_3infer_parameters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_prior_dict = 0;
  PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infer_parameters (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_Tf,&__pyx_n_s_contactMatrix,&__pyx_n_s_prior_dict,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("infer_parameters", 1, 4, 4, 1); __PYX_ERR(0, 118, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("infer_parameters", 1, 4, 4, 2); __PYX_ERR(0, 118, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prior_dict)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("infer_parameters", 1, 4, 4, 3); __PYX_ERR(0, 118, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "infer_parameters") < 0)) __PYX_ERR(0, 118, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_x = values[0];
    __pyx_v_Tf = values[1];
    __pyx_v_contactMatrix = values[2];
    __pyx_v_prior_dict = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("infer_parameters", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 118, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("pyross.inference.SIR_type.infer_parameters", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_2infer_parameters(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_x, __pyx_v_Tf, __pyx_v_contactMatrix, __pyx_v_prior_dict, __pyx_v_kwargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_2infer_parameters(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_Tf, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_prior_dict, PyObject *__pyx_v_kwargs) {
  PyObject *__pyx_v_output_dict = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infer_parameters", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.infer_parameters", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_output_dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0119:         """Infers the MAP estimates for epidemiological parameters
 0120: 
 0121:         Parameters
 0122:         ----------
 0123:             see `infer`
 0124: 
 0125:         Returns
 0126:         -------
 0127:         output: dict
 0128:             Contains the following keys for users:
 0129: 
 0130:             map_dict: dict
 0131:                 A dictionary for MAPs. Keys are the names of the parameters and
 0132:                 the corresponding values are its MAP estimates.
 0133:             -logp: float
 0134:                 The value of -logp at MAP.
 0135: 
 0136:         Note
 0137:         ----
 0138:         This function just calls `infer` with a fixed contactMatrix function, will be deprecated.
 0139:         """
 0140: 
 0141: 
+0142:         output_dict = self.infer(x, Tf, prior_dict, contactMatrix=contactMatrix, generator=None,
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_infer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_x);
  __Pyx_GIVEREF(__pyx_v_x);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_x);
  __Pyx_INCREF(__pyx_v_Tf);
  __Pyx_GIVEREF(__pyx_v_Tf);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_Tf);
  __Pyx_INCREF(__pyx_v_prior_dict);
  __Pyx_GIVEREF(__pyx_v_prior_dict);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_prior_dict);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_contactMatrix, __pyx_v_contactMatrix) < 0) __PYX_ERR(0, 142, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_generator, Py_None) < 0) __PYX_ERR(0, 142, __pyx_L1_error)
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_output_dict = __pyx_t_4;
  __pyx_t_4 = 0;
+0143:                       intervention_fun=None, **kwargs)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_intervention_fun, Py_None) < 0) __PYX_ERR(0, 142, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_4;
  __pyx_t_4 = 0;
  if (__Pyx_MergeKeywords(__pyx_t_3, __pyx_v_kwargs) < 0) __PYX_ERR(0, 143, __pyx_L1_error)
 0144: 
 0145:         # match old output dictionary key names (the new implementation of infer uses the same keys as latent_infer)
 0146: 
+0147:         output_dict['map_dict'] = output_dict['params_dict']
  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_output_dict, __pyx_n_u_params_dict); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(PyObject_SetItem(__pyx_v_output_dict, __pyx_n_u_map_dict, __pyx_t_4) < 0)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0148:         output_dict['keys'] = output_dict['param_keys']
  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_output_dict, __pyx_n_u_param_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(PyObject_SetItem(__pyx_v_output_dict, __pyx_n_u_keys, __pyx_t_4) < 0)) __PYX_ERR(0, 148, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0149:         output_dict['flat_guess_range'] = output_dict['param_guess_range']
  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_output_dict, __pyx_n_u_param_guess_range); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(PyObject_SetItem(__pyx_v_output_dict, __pyx_n_u_flat_guess_range, __pyx_t_4) < 0)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0150:         output_dict['scaled_guesses'] = output_dict['scaled_param_guesses']
  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_output_dict, __pyx_n_u_scaled_param_guesses); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 150, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(PyObject_SetItem(__pyx_v_output_dict, __pyx_n_u_scaled_guesses, __pyx_t_4) < 0)) __PYX_ERR(0, 150, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0151:         output_dict['flat_map'] = output_dict['flat_params']
  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_output_dict, __pyx_n_u_flat_params); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(PyObject_SetItem(__pyx_v_output_dict, __pyx_n_u_flat_map, __pyx_t_4) < 0)) __PYX_ERR(0, 151, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 0152: 
+0153:         return output_dict
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_output_dict);
  __pyx_r = __pyx_v_output_dict;
  goto __pyx_L0;
 0154: 
+0155:     def nested_sampling_inference(self, x, Tf, contactMatrix, prior_dict, tangent=False, verbose=False,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_5nested_sampling_inference(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_4nested_sampling_inference[] = "\n        Run nested sampling for model parameters without latent variables.\n\n        Note\n        ----\n        This function has been replaced by `pyross.inference.infer_nested_sampling` and will be deleted\n        in a future version of pyross. See there for a documentation of the function parameters.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_5nested_sampling_inference(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_prior_dict = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_verbose = 0;
  PyObject *__pyx_v_nprocesses = 0;
  PyObject *__pyx_v_queue_size = 0;
  PyObject *__pyx_v_maxiter = 0;
  PyObject *__pyx_v_maxcall = 0;
  PyObject *__pyx_v_dlogz = 0;
  PyObject *__pyx_v_n_effective = 0;
  PyObject *__pyx_v_add_live = 0;
  PyObject *__pyx_v_sampler = 0;
  PyObject *__pyx_v_dynesty_args = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nested_sampling_inference (wrapper)", 0);
  __pyx_v_dynesty_args = PyDict_New(); if (unlikely(!__pyx_v_dynesty_args)) return NULL;
  __Pyx_GOTREF(__pyx_v_dynesty_args);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_Tf,&__pyx_n_s_contactMatrix,&__pyx_n_s_prior_dict,&__pyx_n_s_tangent,&__pyx_n_s_verbose,&__pyx_n_s_nprocesses,&__pyx_n_s_queue_size,&__pyx_n_s_maxiter,&__pyx_n_s_maxcall,&__pyx_n_s_dlogz,&__pyx_n_s_n_effective,&__pyx_n_s_add_live,&__pyx_n_s_sampler,0};
    PyObject* values[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[4] = ((PyObject *)Py_False);
    values[5] = ((PyObject *)Py_False);
    values[6] = ((PyObject *)__pyx_int_0);
/* … */
  /* function exit code */
  __Pyx_XDECREF(__pyx_v_dynesty_args);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_4nested_sampling_inference(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_Tf, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_prior_dict, PyObject *__pyx_v_tangent, PyObject *__pyx_v_verbose, PyObject *__pyx_v_nprocesses, PyObject *__pyx_v_queue_size, PyObject *__pyx_v_maxiter, PyObject *__pyx_v_maxcall, PyObject *__pyx_v_dlogz, PyObject *__pyx_v_n_effective, PyObject *__pyx_v_add_live, PyObject *__pyx_v_sampler, PyObject *__pyx_v_dynesty_args) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nested_sampling_inference", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.nested_sampling_inference", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0156:                                   nprocesses=0, queue_size=None, maxiter=None, maxcall=None, dlogz=None,
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject *)Py_None);
    values[10] = ((PyObject *)Py_None);
+0157:                                   n_effective=None, add_live=True, sampler=None, **dynesty_args):
    values[11] = ((PyObject *)Py_None);
    values[12] = ((PyObject *)Py_True);
    values[13] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("nested_sampling_inference", 0, 4, 14, 1); __PYX_ERR(0, 155, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("nested_sampling_inference", 0, 4, 14, 2); __PYX_ERR(0, 155, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prior_dict)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("nested_sampling_inference", 0, 4, 14, 3); __PYX_ERR(0, 155, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_verbose);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nprocesses);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_queue_size);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxiter);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxcall);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dlogz);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_effective);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_add_live);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sampler);
          if (value) { values[13] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_dynesty_args, values, pos_args, "nested_sampling_inference") < 0)) __PYX_ERR(0, 155, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_x = values[0];
    __pyx_v_Tf = values[1];
    __pyx_v_contactMatrix = values[2];
    __pyx_v_prior_dict = values[3];
    __pyx_v_tangent = values[4];
    __pyx_v_verbose = values[5];
    __pyx_v_nprocesses = values[6];
    __pyx_v_queue_size = values[7];
    __pyx_v_maxiter = values[8];
    __pyx_v_maxcall = values[9];
    __pyx_v_dlogz = values[10];
    __pyx_v_n_effective = values[11];
    __pyx_v_add_live = values[12];
    __pyx_v_sampler = values[13];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("nested_sampling_inference", 0, 4, 14, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 155, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_dynesty_args); __pyx_v_dynesty_args = 0;
  __Pyx_AddTraceback("pyross.inference.SIR_type.nested_sampling_inference", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_4nested_sampling_inference(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_x, __pyx_v_Tf, __pyx_v_contactMatrix, __pyx_v_prior_dict, __pyx_v_tangent, __pyx_v_verbose, __pyx_v_nprocesses, __pyx_v_queue_size, __pyx_v_maxiter, __pyx_v_maxcall, __pyx_v_dlogz, __pyx_v_n_effective, __pyx_v_add_live, __pyx_v_sampler, __pyx_v_dynesty_args);
 0158:         """
 0159:         Run nested sampling for model parameters without latent variables.
 0160: 
 0161:         Note
 0162:         ----
 0163:         This function has been replaced by `pyross.inference.infer_nested_sampling` and will be deleted
 0164:         in a future version of pyross. See there for a documentation of the function parameters.
 0165:         """
+0166:         return self.infer_nested_sampling(x, Tf, prior_dict, contactMatrix=contactMatrix, generator=None,
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_infer_nested_sampling); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_x);
  __Pyx_GIVEREF(__pyx_v_x);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_x);
  __Pyx_INCREF(__pyx_v_Tf);
  __Pyx_GIVEREF(__pyx_v_Tf);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_Tf);
  __Pyx_INCREF(__pyx_v_prior_dict);
  __Pyx_GIVEREF(__pyx_v_prior_dict);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_prior_dict);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_contactMatrix, __pyx_v_contactMatrix) < 0) __PYX_ERR(0, 166, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_generator, Py_None) < 0) __PYX_ERR(0, 166, __pyx_L1_error)
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
+0167:                                           intervention_fun=None, tangent=tangent, verbose=verbose, nprocesses=nprocesses,
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_intervention_fun, Py_None) < 0) __PYX_ERR(0, 166, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_tangent, __pyx_v_tangent) < 0) __PYX_ERR(0, 166, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_verbose, __pyx_v_verbose) < 0) __PYX_ERR(0, 166, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_nprocesses, __pyx_v_nprocesses) < 0) __PYX_ERR(0, 166, __pyx_L1_error)
+0168:                                           queue_size=queue_size, maxiter=maxiter, maxcall=maxcall, dlogz=dlogz,
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_queue_size, __pyx_v_queue_size) < 0) __PYX_ERR(0, 166, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_maxiter, __pyx_v_maxiter) < 0) __PYX_ERR(0, 166, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_maxcall, __pyx_v_maxcall) < 0) __PYX_ERR(0, 166, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dlogz, __pyx_v_dlogz) < 0) __PYX_ERR(0, 166, __pyx_L1_error)
+0169:                                           n_effective=n_effective, add_live=add_live, sampler=sampler, **dynesty_args)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_n_effective, __pyx_v_n_effective) < 0) __PYX_ERR(0, 166, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_add_live, __pyx_v_add_live) < 0) __PYX_ERR(0, 166, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_sampler, __pyx_v_sampler) < 0) __PYX_ERR(0, 166, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_4;
  __pyx_t_4 = 0;
  if (__Pyx_MergeKeywords(__pyx_t_3, __pyx_v_dynesty_args) < 0) __PYX_ERR(0, 169, __pyx_L1_error)
 0170: 
+0171:     def nested_sampling_inference_process_result(self, sampler, prior_dict):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_7nested_sampling_inference_process_result(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_6nested_sampling_inference_process_result[] = "\n        Take the sampler generated by `nested_sampling_inference` and produce output dictionaries for further use\n        in the pyross framework.\n\n        Note\n        ----\n        This function has been replaced by `pyross.inference.infer_nested_sampling_process_result` and will be deleted\n        in a future version of pyross. See there for a documentation of the function parameters.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_7nested_sampling_inference_process_result(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sampler = 0;
  PyObject *__pyx_v_prior_dict = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nested_sampling_inference_process_result (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sampler,&__pyx_n_s_prior_dict,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sampler)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prior_dict)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("nested_sampling_inference_process_result", 1, 2, 2, 1); __PYX_ERR(0, 171, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "nested_sampling_inference_process_result") < 0)) __PYX_ERR(0, 171, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sampler = values[0];
    __pyx_v_prior_dict = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("nested_sampling_inference_process_result", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 171, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.nested_sampling_inference_process_result", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_6nested_sampling_inference_process_result(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_sampler, __pyx_v_prior_dict);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_6nested_sampling_inference_process_result(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_sampler, PyObject *__pyx_v_prior_dict) {
  PyObject *__pyx_v_result = NULL;
  PyObject *__pyx_v_output_samples = NULL;
  PyObject *__pyx_v_out_dict = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nested_sampling_inference_process_result", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.nested_sampling_inference_process_result", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XDECREF(__pyx_v_output_samples);
  __Pyx_XDECREF(__pyx_v_out_dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0172:         """
 0173:         Take the sampler generated by `nested_sampling_inference` and produce output dictionaries for further use
 0174:         in the pyross framework.
 0175: 
 0176:         Note
 0177:         ----
 0178:         This function has been replaced by `pyross.inference.infer_nested_sampling_process_result` and will be deleted
 0179:         in a future version of pyross. See there for a documentation of the function parameters.
 0180:         """
+0181:         result, output_samples = self.infer_nested_sampling_process_result(sampler, prior_dict, contactMatrix=self.contactMatrix,
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_infer_nested_sampling_process_re); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_sampler);
  __Pyx_GIVEREF(__pyx_v_sampler);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_sampler);
  __Pyx_INCREF(__pyx_v_prior_dict);
  __Pyx_GIVEREF(__pyx_v_prior_dict);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_prior_dict);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_contactMatrix, __pyx_v_self->contactMatrix) < 0) __PYX_ERR(0, 181, __pyx_L1_error)
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
    PyObject* sequence = __pyx_t_4;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 181, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 181, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 181, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_5(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_2 = __pyx_t_5(__pyx_t_1); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_1), 2) < 0) __PYX_ERR(0, 181, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 181, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_result = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_output_samples = __pyx_t_2;
  __pyx_t_2 = 0;
+0182:                                                                            generator=None, intervention_fun=None)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_generator, Py_None) < 0) __PYX_ERR(0, 181, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_intervention_fun, Py_None) < 0) __PYX_ERR(0, 181, __pyx_L1_error)
 0183: 
 0184:         # Match old dictionary key names for backward compatibility.
+0185:         for out_dict in output_samples:
  if (likely(PyList_CheckExact(__pyx_v_output_samples)) || PyTuple_CheckExact(__pyx_v_output_samples)) {
    __pyx_t_4 = __pyx_v_output_samples; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
  } else {
    __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_output_samples); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 185, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 185, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_7)) {
      if (likely(PyList_CheckExact(__pyx_t_4))) {
        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 185, __pyx_L1_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 185, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      } else {
        if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 185, __pyx_L1_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 185, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      }
    } else {
      __pyx_t_2 = __pyx_t_7(__pyx_t_4);
      if (unlikely(!__pyx_t_2)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 185, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_XDECREF_SET(__pyx_v_out_dict, __pyx_t_2);
    __pyx_t_2 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0186:             out_dict['map_dict']         = out_dict.pop('params_dict')
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out_dict, __pyx_n_s_pop); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 186, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_n_u_params_dict) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_n_u_params_dict);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 186, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_out_dict, __pyx_n_u_map_dict, __pyx_t_2) < 0)) __PYX_ERR(0, 186, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0187:             out_dict['keys']             = out_dict.pop('param_keys')
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out_dict, __pyx_n_s_pop); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 187, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_n_u_param_keys) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_n_u_param_keys);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 187, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_out_dict, __pyx_n_u_keys, __pyx_t_2) < 0)) __PYX_ERR(0, 187, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0188:             out_dict['flat_guess_range'] = out_dict.pop('param_guess_range')
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out_dict, __pyx_n_s_pop); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 188, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_n_u_param_guess_range) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_n_u_param_guess_range);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 188, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_out_dict, __pyx_n_u_flat_guess_range, __pyx_t_2) < 0)) __PYX_ERR(0, 188, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0189:             out_dict['scaled_guesses']   = out_dict.pop('scaled_param_guesses')
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out_dict, __pyx_n_s_pop); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 189, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_n_u_scaled_param_guesses) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_n_u_scaled_param_guesses);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 189, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_out_dict, __pyx_n_u_scaled_guesses, __pyx_t_2) < 0)) __PYX_ERR(0, 189, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0190:             out_dict['flat_map']         = out_dict.pop('flat_params')
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out_dict, __pyx_n_s_pop); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 190, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_n_u_flat_params) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_n_u_flat_params);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 190, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_out_dict, __pyx_n_u_flat_map, __pyx_t_2) < 0)) __PYX_ERR(0, 190, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0191: 
+0192:         return result, output_samples
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_v_result);
  __Pyx_GIVEREF(__pyx_v_result);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_result);
  __Pyx_INCREF(__pyx_v_output_samples);
  __Pyx_GIVEREF(__pyx_v_output_samples);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_output_samples);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 0193: 
+0194:     def mcmc_inference(self, x, Tf, contactMatrix, prior_dict, tangent=False, verbose=False, sampler=None, nwalkers=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_9mcmc_inference(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_8mcmc_inference[] = "\n        Sample the posterior distribution of the epidemiological parameters using ensemble MCMC.\n\n        Note\n        ----\n        This function has been replaced by `pyross.inference.infer_mcmc` and will be deleted in a future version of pyross.\n        See there for a documentation of the function parameters.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_9mcmc_inference(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_prior_dict = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_verbose = 0;
  PyObject *__pyx_v_sampler = 0;
  PyObject *__pyx_v_nwalkers = 0;
  PyObject *__pyx_v_walker_pos = 0;
  PyObject *__pyx_v_nsamples = 0;
  PyObject *__pyx_v_nprocesses = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mcmc_inference (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_Tf,&__pyx_n_s_contactMatrix,&__pyx_n_s_prior_dict,&__pyx_n_s_tangent,&__pyx_n_s_verbose,&__pyx_n_s_sampler,&__pyx_n_s_nwalkers,&__pyx_n_s_walker_pos,&__pyx_n_s_nsamples,&__pyx_n_s_nprocesses,0};
    PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0};
    values[4] = ((PyObject *)Py_False);
    values[5] = ((PyObject *)Py_False);
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_8mcmc_inference(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_Tf, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_prior_dict, PyObject *__pyx_v_tangent, PyObject *__pyx_v_verbose, PyObject *__pyx_v_sampler, PyObject *__pyx_v_nwalkers, PyObject *__pyx_v_walker_pos, PyObject *__pyx_v_nsamples, PyObject *__pyx_v_nprocesses) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mcmc_inference", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.mcmc_inference", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0195:                        walker_pos=None, nsamples=1000, nprocesses=0):
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject *)__pyx_int_1000);
    values[10] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mcmc_inference", 0, 4, 11, 1); __PYX_ERR(0, 194, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mcmc_inference", 0, 4, 11, 2); __PYX_ERR(0, 194, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prior_dict)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mcmc_inference", 0, 4, 11, 3); __PYX_ERR(0, 194, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_verbose);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sampler);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nwalkers);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_walker_pos);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nsamples);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nprocesses);
          if (value) { values[10] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mcmc_inference") < 0)) __PYX_ERR(0, 194, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_x = values[0];
    __pyx_v_Tf = values[1];
    __pyx_v_contactMatrix = values[2];
    __pyx_v_prior_dict = values[3];
    __pyx_v_tangent = values[4];
    __pyx_v_verbose = values[5];
    __pyx_v_sampler = values[6];
    __pyx_v_nwalkers = values[7];
    __pyx_v_walker_pos = values[8];
    __pyx_v_nsamples = values[9];
    __pyx_v_nprocesses = values[10];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("mcmc_inference", 0, 4, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 194, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.mcmc_inference", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_8mcmc_inference(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_x, __pyx_v_Tf, __pyx_v_contactMatrix, __pyx_v_prior_dict, __pyx_v_tangent, __pyx_v_verbose, __pyx_v_sampler, __pyx_v_nwalkers, __pyx_v_walker_pos, __pyx_v_nsamples, __pyx_v_nprocesses);
 0196:         """
 0197:         Sample the posterior distribution of the epidemiological parameters using ensemble MCMC.
 0198: 
 0199:         Note
 0200:         ----
 0201:         This function has been replaced by `pyross.inference.infer_mcmc` and will be deleted in a future version of pyross.
 0202:         See there for a documentation of the function parameters.
 0203:         """
+0204:         return self.infer_mcmc(x, Tf, prior_dict, contactMatrix=contactMatrix, generator=None, intervention_fun=None,
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_infer_mcmc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_x);
  __Pyx_GIVEREF(__pyx_v_x);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_x);
  __Pyx_INCREF(__pyx_v_Tf);
  __Pyx_GIVEREF(__pyx_v_Tf);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_Tf);
  __Pyx_INCREF(__pyx_v_prior_dict);
  __Pyx_GIVEREF(__pyx_v_prior_dict);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_prior_dict);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_contactMatrix, __pyx_v_contactMatrix) < 0) __PYX_ERR(0, 204, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_generator, Py_None) < 0) __PYX_ERR(0, 204, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_intervention_fun, Py_None) < 0) __PYX_ERR(0, 204, __pyx_L1_error)
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
+0205:                                tangent=tangent, verbose=verbose, sampler=sampler, nwalkers=nwalkers,
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_tangent, __pyx_v_tangent) < 0) __PYX_ERR(0, 204, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_verbose, __pyx_v_verbose) < 0) __PYX_ERR(0, 204, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_sampler, __pyx_v_sampler) < 0) __PYX_ERR(0, 204, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_nwalkers, __pyx_v_nwalkers) < 0) __PYX_ERR(0, 204, __pyx_L1_error)
+0206:                                walker_pos=walker_pos, nsamples=nsamples, nprocesses=nprocesses)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_walker_pos, __pyx_v_walker_pos) < 0) __PYX_ERR(0, 204, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_nsamples, __pyx_v_nsamples) < 0) __PYX_ERR(0, 204, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_nprocesses, __pyx_v_nprocesses) < 0) __PYX_ERR(0, 204, __pyx_L1_error)
 0207: 
+0208:     def mcmc_inference_process_result(self, sampler, prior_dict, flat=True, discard=0, thin=1):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_11mcmc_inference_process_result(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_10mcmc_inference_process_result[] = "\n        Take the sampler generated by `mcmc_inference` and produce output dictionaries for further use in the\n        pyross framework.\n\n        Note\n        ----\n        This function has been replaced by `pyross.inference.infer_mcmc_process_result` and will be deleted in a future version\n        of pyross. See there for a documentation of the function parameters.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_11mcmc_inference_process_result(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sampler = 0;
  PyObject *__pyx_v_prior_dict = 0;
  PyObject *__pyx_v_flat = 0;
  PyObject *__pyx_v_discard = 0;
  PyObject *__pyx_v_thin = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mcmc_inference_process_result (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sampler,&__pyx_n_s_prior_dict,&__pyx_n_s_flat,&__pyx_n_s_discard,&__pyx_n_s_thin,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[2] = ((PyObject *)Py_True);
    values[3] = ((PyObject *)__pyx_int_0);
    values[4] = ((PyObject *)__pyx_int_1);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sampler)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prior_dict)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mcmc_inference_process_result", 0, 2, 5, 1); __PYX_ERR(0, 208, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flat);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_discard);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_thin);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mcmc_inference_process_result") < 0)) __PYX_ERR(0, 208, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sampler = values[0];
    __pyx_v_prior_dict = values[1];
    __pyx_v_flat = values[2];
    __pyx_v_discard = values[3];
    __pyx_v_thin = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("mcmc_inference_process_result", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 208, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.mcmc_inference_process_result", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_10mcmc_inference_process_result(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_sampler, __pyx_v_prior_dict, __pyx_v_flat, __pyx_v_discard, __pyx_v_thin);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_10mcmc_inference_process_result(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_sampler, PyObject *__pyx_v_prior_dict, PyObject *__pyx_v_flat, PyObject *__pyx_v_discard, PyObject *__pyx_v_thin) {
  PyObject *__pyx_v_output_samples = NULL;
  PyObject *__pyx_v_flat_sample_list = NULL;
  PyObject *__pyx_v_out_dict = NULL;
  PyObject *__pyx_7genexpr__pyx_v_sublist = NULL;
  PyObject *__pyx_7genexpr__pyx_v_item = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mcmc_inference_process_result", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.mcmc_inference_process_result", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_output_samples);
  __Pyx_XDECREF(__pyx_v_flat_sample_list);
  __Pyx_XDECREF(__pyx_v_out_dict);
  __Pyx_XDECREF(__pyx_7genexpr__pyx_v_sublist);
  __Pyx_XDECREF(__pyx_7genexpr__pyx_v_item);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0209:         """
 0210:         Take the sampler generated by `mcmc_inference` and produce output dictionaries for further use in the
 0211:         pyross framework.
 0212: 
 0213:         Note
 0214:         ----
 0215:         This function has been replaced by `pyross.inference.infer_mcmc_process_result` and will be deleted in a future version
 0216:         of pyross. See there for a documentation of the function parameters.
 0217:         """
+0218:         output_samples = self.infer_mcmc_process_result(sampler, prior_dict, contactMatrix=self.contactMatrix, generator=None,
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_infer_mcmc_process_result); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_sampler);
  __Pyx_GIVEREF(__pyx_v_sampler);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_sampler);
  __Pyx_INCREF(__pyx_v_prior_dict);
  __Pyx_GIVEREF(__pyx_v_prior_dict);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_prior_dict);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_contactMatrix, __pyx_v_self->contactMatrix) < 0) __PYX_ERR(0, 218, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_generator, Py_None) < 0) __PYX_ERR(0, 218, __pyx_L1_error)
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_output_samples = __pyx_t_4;
  __pyx_t_4 = 0;
+0219:                                                         intervention_fun=None, flat=flat, discard=discard, thin=thin)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_intervention_fun, Py_None) < 0) __PYX_ERR(0, 218, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_flat, __pyx_v_flat) < 0) __PYX_ERR(0, 218, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_discard, __pyx_v_discard) < 0) __PYX_ERR(0, 218, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_thin, __pyx_v_thin) < 0) __PYX_ERR(0, 218, __pyx_L1_error)
 0220: 
 0221:         # Match old dictionary key names for backward compatibility.
+0222:         if flat:
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_flat); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 222, __pyx_L1_error)
  if (__pyx_t_5) {
/* … */
    goto __pyx_L3;
  }
+0223:             flat_sample_list = output_samples
    __Pyx_INCREF(__pyx_v_output_samples);
    __pyx_v_flat_sample_list = __pyx_v_output_samples;
 0224:         else:
+0225:             flat_sample_list = [item for sublist in output_samples for item in sublist]
  /*else*/ {
    { /* enter inner scope */
      __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 225, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (likely(PyList_CheckExact(__pyx_v_output_samples)) || PyTuple_CheckExact(__pyx_v_output_samples)) {
        __pyx_t_3 = __pyx_v_output_samples; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
        __pyx_t_7 = NULL;
      } else {
        __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_output_samples); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 225, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 225, __pyx_L6_error)
      }
      for (;;) {
        if (likely(!__pyx_t_7)) {
          if (likely(PyList_CheckExact(__pyx_t_3))) {
            if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 225, __pyx_L6_error)
            #else
            __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_2);
            #endif
          } else {
            if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 225, __pyx_L6_error)
            #else
            __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_2);
            #endif
          }
        } else {
          __pyx_t_2 = __pyx_t_7(__pyx_t_3);
          if (unlikely(!__pyx_t_2)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 225, __pyx_L6_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_2);
        }
        __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_sublist, __pyx_t_2);
        __pyx_t_2 = 0;
        if (likely(PyList_CheckExact(__pyx_7genexpr__pyx_v_sublist)) || PyTuple_CheckExact(__pyx_7genexpr__pyx_v_sublist)) {
          __pyx_t_2 = __pyx_7genexpr__pyx_v_sublist; __Pyx_INCREF(__pyx_t_2); __pyx_t_8 = 0;
          __pyx_t_9 = NULL;
        } else {
          __pyx_t_8 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_7genexpr__pyx_v_sublist); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_9 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 225, __pyx_L6_error)
        }
        for (;;) {
          if (likely(!__pyx_t_9)) {
            if (likely(PyList_CheckExact(__pyx_t_2))) {
              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_2)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 225, __pyx_L6_error)
              #else
              __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 225, __pyx_L6_error)
              __Pyx_GOTREF(__pyx_t_1);
              #endif
            } else {
              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 225, __pyx_L6_error)
              #else
              __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 225, __pyx_L6_error)
              __Pyx_GOTREF(__pyx_t_1);
              #endif
            }
          } else {
            __pyx_t_1 = __pyx_t_9(__pyx_t_2);
            if (unlikely(!__pyx_t_1)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 225, __pyx_L6_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_1);
          }
          __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_item, __pyx_t_1);
          __pyx_t_1 = 0;
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_7genexpr__pyx_v_item))) __PYX_ERR(0, 225, __pyx_L6_error)
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_7genexpr__pyx_v_item); __pyx_7genexpr__pyx_v_item = 0;
      __Pyx_XDECREF(__pyx_7genexpr__pyx_v_sublist); __pyx_7genexpr__pyx_v_sublist = 0;
      goto __pyx_L11_exit_scope;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_7genexpr__pyx_v_item); __pyx_7genexpr__pyx_v_item = 0;
      __Pyx_XDECREF(__pyx_7genexpr__pyx_v_sublist); __pyx_7genexpr__pyx_v_sublist = 0;
      goto __pyx_L1_error;
      __pyx_L11_exit_scope:;
    } /* exit inner scope */
    __pyx_v_flat_sample_list = __pyx_t_4;
    __pyx_t_4 = 0;
  }
  __pyx_L3:;
+0226:         for out_dict in flat_sample_list:
  if (likely(PyList_CheckExact(__pyx_v_flat_sample_list)) || PyTuple_CheckExact(__pyx_v_flat_sample_list)) {
    __pyx_t_4 = __pyx_v_flat_sample_list; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
  } else {
    __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_flat_sample_list); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 226, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_7)) {
      if (likely(PyList_CheckExact(__pyx_t_4))) {
        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 226, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 226, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 226, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 226, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_7(__pyx_t_4);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 226, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF_SET(__pyx_v_out_dict, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0227:             out_dict['map_dict']         = out_dict.pop('params_dict')
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out_dict, __pyx_n_s_pop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_n_u_params_dict) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_u_params_dict);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_out_dict, __pyx_n_u_map_dict, __pyx_t_3) < 0)) __PYX_ERR(0, 227, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0228:             out_dict['keys']             = out_dict.pop('param_keys')
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out_dict, __pyx_n_s_pop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 228, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_n_u_param_keys) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_u_param_keys);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 228, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_out_dict, __pyx_n_u_keys, __pyx_t_3) < 0)) __PYX_ERR(0, 228, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0229:             out_dict['flat_guess_range'] = out_dict.pop('param_guess_range')
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out_dict, __pyx_n_s_pop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 229, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_n_u_param_guess_range) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_u_param_guess_range);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 229, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_out_dict, __pyx_n_u_flat_guess_range, __pyx_t_3) < 0)) __PYX_ERR(0, 229, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0230:             out_dict['scaled_guesses']   = out_dict.pop('scaled_param_guesses')
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out_dict, __pyx_n_s_pop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_n_u_scaled_param_guesses) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_u_scaled_param_guesses);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_out_dict, __pyx_n_u_scaled_guesses, __pyx_t_3) < 0)) __PYX_ERR(0, 230, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0231:             out_dict['flat_map']         = out_dict.pop('flat_params')
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out_dict, __pyx_n_s_pop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 231, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_n_u_flat_params) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_u_flat_params);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 231, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_out_dict, __pyx_n_u_flat_map, __pyx_t_3) < 0)) __PYX_ERR(0, 231, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 0232: 
+0233:         return output_samples
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_output_samples);
  __pyx_r = __pyx_v_output_samples;
  goto __pyx_L0;
 0234: 
 0235: 
+0236:     def infer_control(self, x, Tf, generator, prior_dict, **kwargs):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_13infer_control(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_12infer_control[] = "\n        Compute the maximum a-posteriori (MAP) estimate of the change of control parameters for a SIR type model in\n        lockdown.\n\n        Parameters\n        ----------\n            see `infer`\n\n        Returns\n        -------\n        output_dict: dict\n            Dictionary of MAP estimates, containing the following keys for users:\n\n            map_dict: dict\n                Dictionary for MAP estimates of the control parameters.\n            -logp: float\n                Value of -logp at MAP.\n\n        Note\n        ----\n        This function just calls `infer` with the specified generator, will be deprecated.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_13infer_control(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_prior_dict = 0;
  PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infer_control (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_Tf,&__pyx_n_s_generator,&__pyx_n_s_prior_dict,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("infer_control", 1, 4, 4, 1); __PYX_ERR(0, 236, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("infer_control", 1, 4, 4, 2); __PYX_ERR(0, 236, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prior_dict)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("infer_control", 1, 4, 4, 3); __PYX_ERR(0, 236, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "infer_control") < 0)) __PYX_ERR(0, 236, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_x = values[0];
    __pyx_v_Tf = values[1];
    __pyx_v_generator = values[2];
    __pyx_v_prior_dict = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("infer_control", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 236, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("pyross.inference.SIR_type.infer_control", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_12infer_control(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_x, __pyx_v_Tf, __pyx_v_generator, __pyx_v_prior_dict, __pyx_v_kwargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_12infer_control(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_Tf, PyObject *__pyx_v_generator, PyObject *__pyx_v_prior_dict, PyObject *__pyx_v_kwargs) {
  PyObject *__pyx_v_output_dict = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infer_control", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.infer_control", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_output_dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0237:         """
 0238:         Compute the maximum a-posteriori (MAP) estimate of the change of control parameters for a SIR type model in
 0239:         lockdown.
 0240: 
 0241:         Parameters
 0242:         ----------
 0243:             see `infer`
 0244: 
 0245:         Returns
 0246:         -------
 0247:         output_dict: dict
 0248:             Dictionary of MAP estimates, containing the following keys for users:
 0249: 
 0250:             map_dict: dict
 0251:                 Dictionary for MAP estimates of the control parameters.
 0252:             -logp: float
 0253:                 Value of -logp at MAP.
 0254: 
 0255:         Note
 0256:         ----
 0257:         This function just calls `infer` with the specified generator, will be deprecated.
 0258:         """
 0259: 
+0260:         output_dict = self.infer(x, Tf, prior_dict, contactMatrix=None, generator=generator,
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_infer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_x);
  __Pyx_GIVEREF(__pyx_v_x);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_x);
  __Pyx_INCREF(__pyx_v_Tf);
  __Pyx_GIVEREF(__pyx_v_Tf);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_Tf);
  __Pyx_INCREF(__pyx_v_prior_dict);
  __Pyx_GIVEREF(__pyx_v_prior_dict);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_prior_dict);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 260, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_contactMatrix, Py_None) < 0) __PYX_ERR(0, 260, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_generator, __pyx_v_generator) < 0) __PYX_ERR(0, 260, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_4;
  __pyx_t_4 = 0;
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 260, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_output_dict = __pyx_t_4;
  __pyx_t_4 = 0;
+0261:                       **kwargs)
  if (__Pyx_MergeKeywords(__pyx_t_3, __pyx_v_kwargs) < 0) __PYX_ERR(0, 261, __pyx_L1_error)
 0262: 
 0263:         # match old output dictionary key names
+0264:         del output_dict['params_dict']
  if (unlikely(PyObject_DelItem(__pyx_v_output_dict, __pyx_n_u_params_dict) < 0)) __PYX_ERR(0, 264, __pyx_L1_error)
+0265:         output_dict['map_dict'] = output_dict['control_params_dict']
  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_output_dict, __pyx_n_u_control_params_dict); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 265, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(PyObject_SetItem(__pyx_v_output_dict, __pyx_n_u_map_dict, __pyx_t_4) < 0)) __PYX_ERR(0, 265, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0266:         output_dict['keys'] = output_dict['param_keys']
  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_output_dict, __pyx_n_u_param_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(PyObject_SetItem(__pyx_v_output_dict, __pyx_n_u_keys, __pyx_t_4) < 0)) __PYX_ERR(0, 266, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0267:         output_dict['flat_guess_range'] = output_dict['param_guess_range']
  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_output_dict, __pyx_n_u_param_guess_range); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(PyObject_SetItem(__pyx_v_output_dict, __pyx_n_u_flat_guess_range, __pyx_t_4) < 0)) __PYX_ERR(0, 267, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0268:         output_dict['scaled_guesses'] = output_dict['scaled_param_guesses']
  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_output_dict, __pyx_n_u_scaled_param_guesses); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(PyObject_SetItem(__pyx_v_output_dict, __pyx_n_u_scaled_guesses, __pyx_t_4) < 0)) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 0269: 
+0270:         return output_dict
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_output_dict);
  __pyx_r = __pyx_v_output_dict;
  goto __pyx_L0;
 0271: 
+0272:     def _loglikelihood(self, params, contactMatrix=None, generator=None, intervention_fun=None, keys=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_15_loglikelihood(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_14_loglikelihood[] = "Compute the log-likelihood of the model.";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_15_loglikelihood(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_params = 0;
  CYTHON_UNUSED PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_is_scale_parameter = 0;
  PyObject *__pyx_v_flat_guess_range = 0;
  PyObject *__pyx_v_scaled_guesses = 0;
  PyObject *__pyx_v_bounds = 0;
  PyObject *__pyx_v_inter_steps = 0;
  CYTHON_UNUSED PyObject *__pyx_v_catchall_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_loglikelihood (wrapper)", 0);
  __pyx_v_catchall_kwargs = PyDict_New(); if (unlikely(!__pyx_v_catchall_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_catchall_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_params,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_keys,&__pyx_n_s_x,&__pyx_n_s_Tf,&__pyx_n_s_tangent,&__pyx_n_s_is_scale_parameter,&__pyx_n_s_flat_guess_range,&__pyx_n_s_scaled_guesses,&__pyx_n_s_bounds,&__pyx_n_s_inter_steps,0};
    PyObject* values[13] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_None);
    values[4] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_XDECREF(__pyx_v_catchall_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_14_loglikelihood(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_params, CYTHON_UNUSED PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_keys, PyObject *__pyx_v_x, PyObject *__pyx_v_Tf, PyObject *__pyx_v_tangent, PyObject *__pyx_v_is_scale_parameter, PyObject *__pyx_v_flat_guess_range, PyObject *__pyx_v_scaled_guesses, PyObject *__pyx_v_bounds, PyObject *__pyx_v_inter_steps, CYTHON_UNUSED PyObject *__pyx_v_catchall_kwargs) {
  PyObject *__pyx_v_orig_params = NULL;
  PyObject *__pyx_v_parameters = NULL;
  PyObject *__pyx_v_kwargs = NULL;
  double __pyx_v_minus_logl;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_loglikelihood", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_AddTraceback("pyross.inference.SIR_type._loglikelihood", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_orig_params);
  __Pyx_XDECREF(__pyx_v_parameters);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0273:                        x=None, Tf=None, tangent=None,is_scale_parameter=None, flat_guess_range=None,
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject *)Py_None);
+0274:                        scaled_guesses=None, bounds=None, inter_steps=0, **catchall_kwargs):
    values[10] = ((PyObject *)Py_None);
    values[11] = ((PyObject *)Py_None);
    values[12] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_params)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_is_scale_parameter);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flat_guess_range);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_scaled_guesses);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_bounds);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[12] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_catchall_kwargs, values, pos_args, "_loglikelihood") < 0)) __PYX_ERR(0, 272, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_params = values[0];
    __pyx_v_contactMatrix = values[1];
    __pyx_v_generator = values[2];
    __pyx_v_intervention_fun = values[3];
    __pyx_v_keys = values[4];
    __pyx_v_x = values[5];
    __pyx_v_Tf = values[6];
    __pyx_v_tangent = values[7];
    __pyx_v_is_scale_parameter = values[8];
    __pyx_v_flat_guess_range = values[9];
    __pyx_v_scaled_guesses = values[10];
    __pyx_v_bounds = values[11];
    __pyx_v_inter_steps = values[12];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_loglikelihood", 0, 1, 13, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 272, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_catchall_kwargs); __pyx_v_catchall_kwargs = 0;
  __Pyx_AddTraceback("pyross.inference.SIR_type._loglikelihood", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_14_loglikelihood(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_params, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_keys, __pyx_v_x, __pyx_v_Tf, __pyx_v_tangent, __pyx_v_is_scale_parameter, __pyx_v_flat_guess_range, __pyx_v_scaled_guesses, __pyx_v_bounds, __pyx_v_inter_steps, __pyx_v_catchall_kwargs);
 0275:         """Compute the log-likelihood of the model."""
+0276:         if bounds is not None:
  __pyx_t_1 = (__pyx_v_bounds != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
  }
 0277:             # Check that params is within bounds. If not, return -np.inf.
+0278:             if np.any(bounds[:,0] > params) or np.any(bounds[:,1] < params):
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_any); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_slice_ = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice_)) __PYX_ERR(0, 278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice_);
  __Pyx_GIVEREF(__pyx_slice_);
    __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_bounds, __pyx_tuple__2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_v_params, Py_GT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 278, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (!__pyx_t_1) {
    } else {
      __pyx_t_2 = __pyx_t_1;
      goto __pyx_L5_bool_binop_done;
    }
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_any); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_tuple__2 = PyTuple_Pack(2, __pyx_slice_, __pyx_int_0); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__2);
  __Pyx_GIVEREF(__pyx_tuple__2);
    __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_bounds, __pyx_tuple__3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_v_params, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 278, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 278, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_2 = __pyx_t_1;
    __pyx_L5_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
    }
  __pyx_tuple__3 = PyTuple_Pack(2, __pyx_slice_, __pyx_int_1); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__3);
  __Pyx_GIVEREF(__pyx_tuple__3);
+0279:                 return -np.Inf
      __Pyx_XDECREF(__pyx_r);
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 279, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Inf); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 279, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = PyNumber_Negative(__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 279, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L0;
 0280: 
 0281:         # Restore parameters from flattened parameters
+0282:         orig_params = pyross.utils.unflatten_parameters(params, flat_guess_range,
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyross); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 282, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_utils); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 282, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_unflatten_parameters); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 282, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0283:                                                         is_scale_parameter, scaled_guesses)
  __pyx_t_4 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[5] = {__pyx_t_4, __pyx_v_params, __pyx_v_flat_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_guesses};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 4+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 282, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[5] = {__pyx_t_4, __pyx_v_params, __pyx_v_flat_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_guesses};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 4+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 282, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(4+__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_INCREF(__pyx_v_params);
    __Pyx_GIVEREF(__pyx_v_params);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_7, __pyx_v_params);
    __Pyx_INCREF(__pyx_v_flat_guess_range);
    __Pyx_GIVEREF(__pyx_v_flat_guess_range);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_7, __pyx_v_flat_guess_range);
    __Pyx_INCREF(__pyx_v_is_scale_parameter);
    __Pyx_GIVEREF(__pyx_v_is_scale_parameter);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_7, __pyx_v_is_scale_parameter);
    __Pyx_INCREF(__pyx_v_scaled_guesses);
    __Pyx_GIVEREF(__pyx_v_scaled_guesses);
    PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_7, __pyx_v_scaled_guesses);
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_orig_params = __pyx_t_3;
  __pyx_t_3 = 0;
+0284:         parameters, kwargs = self.fill_params_dict(keys, orig_params, return_additional_params=True)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_fill_params_dict); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_v_keys);
  __Pyx_GIVEREF(__pyx_v_keys);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_keys);
  __Pyx_INCREF(__pyx_v_orig_params);
  __Pyx_GIVEREF(__pyx_v_orig_params);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_orig_params);
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return_additional_params, Py_True) < 0) __PYX_ERR(0, 284, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
    PyObject* sequence = __pyx_t_4;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 284, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_6);
    #else
    __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 284, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 284, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    #endif
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_3 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 284, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext;
    index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_3); if (unlikely(!__pyx_t_5)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_3); if (unlikely(!__pyx_t_6)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_6);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_3), 2) < 0) __PYX_ERR(0, 284, __pyx_L1_error)
    __pyx_t_8 = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_unpacking_done;
    __pyx_L7_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_8 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 284, __pyx_L1_error)
    __pyx_L8_unpacking_done:;
  }
  __pyx_v_parameters = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_kwargs = __pyx_t_6;
  __pyx_t_6 = 0;
 0285: 
+0286:         self.set_params(parameters)
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_params); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_5, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_parameters);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 0287: 
+0288:         if generator is not None:
  __pyx_t_2 = (__pyx_v_generator != Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L9;
  }
+0289:             if intervention_fun is None:
    __pyx_t_1 = (__pyx_v_intervention_fun == Py_None);
    __pyx_t_2 = (__pyx_t_1 != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L10;
    }
+0290:                 self.contactMatrix = generator.constant_contactMatrix(**kwargs)
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_constant_contactMatrix); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 290, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(__pyx_v_kwargs == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
        __PYX_ERR(0, 290, __pyx_L1_error)
      }
      if (likely(PyDict_CheckExact(__pyx_v_kwargs))) {
        __pyx_t_6 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 290, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
      } else {
        __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kwargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 290, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
      }
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 290, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GIVEREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_v_self->contactMatrix);
      __Pyx_DECREF(__pyx_v_self->contactMatrix);
      __pyx_v_self->contactMatrix = __pyx_t_5;
      __pyx_t_5 = 0;
 0291:             else:
+0292:                 self.contactMatrix = generator.intervention_custom_temporal(intervention_fun, **kwargs)
    /*else*/ {
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_intervention_custom_temporal); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 292, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 292, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_v_intervention_fun);
      __Pyx_GIVEREF(__pyx_v_intervention_fun);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_intervention_fun);
      if (unlikely(__pyx_v_kwargs == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
        __PYX_ERR(0, 292, __pyx_L1_error)
      }
      if (likely(PyDict_CheckExact(__pyx_v_kwargs))) {
        __pyx_t_4 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 292, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      } else {
        __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kwargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 292, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 292, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GIVEREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_v_self->contactMatrix);
      __Pyx_DECREF(__pyx_v_self->contactMatrix);
      __pyx_v_self->contactMatrix = __pyx_t_3;
      __pyx_t_3 = 0;
    }
    __pyx_L10:;
 0293:         else:
+0294:             if kwargs != {}:
  /*else*/ {
    __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 294, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyObject_RichCompare(__pyx_v_kwargs, __pyx_t_3, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 294, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 294, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(__pyx_t_2)) {
/* … */
    }
  }
  __pyx_L9:;
+0295:                 raise Exception('Key error or unspecified generator')
      __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 295, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(0, 295, __pyx_L1_error)
/* … */
  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_u_Key_error_or_unspecified_generat); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__4);
  __Pyx_GIVEREF(__pyx_tuple__4);
 0296: 
+0297:         if tangent:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_tangent); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 297, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
    goto __pyx_L12;
  }
+0298:             minus_logl = self._obtain_logp_for_traj_tangent(x, Tf)
    __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_x, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 298, __pyx_L1_error)
    __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_Tf); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 298, __pyx_L1_error)
    __pyx_v_minus_logl = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->_obtain_logp_for_traj_tangent(__pyx_v_self, __pyx_t_9, __pyx_t_10);
    __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
    __pyx_t_9.memview = NULL;
    __pyx_t_9.data = NULL;
 0299:         else:
+0300:             minus_logl = self._obtain_logp_for_traj(x, Tf, inter_steps)
  /*else*/ {
    __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_x, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 300, __pyx_L1_error)
    __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_Tf); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 300, __pyx_L1_error)
    __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_inter_steps); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 300, __pyx_L1_error)
    __pyx_t_13.__pyx_n = 1;
    __pyx_t_13.inter_steps = __pyx_t_11;
    __pyx_t_12 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->_obtain_logp_for_traj(__pyx_v_self, __pyx_t_9, __pyx_t_10, &__pyx_t_13); 
    __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
    __pyx_t_9.memview = NULL;
    __pyx_t_9.data = NULL;
    __pyx_v_minus_logl = __pyx_t_12;
  }
  __pyx_L12:;
 0301: 
+0302:         return -minus_logl
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = PyFloat_FromDouble((-__pyx_v_minus_logl)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 0303: 
+0304:     def _logposterior(self, params, prior=None, **logl_kwargs):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_17_logposterior(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_16_logposterior[] = "Compute the log-posterior (up to a constant) of the model.";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_17_logposterior(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_params = 0;
  PyObject *__pyx_v_prior = 0;
  PyObject *__pyx_v_logl_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_logposterior (wrapper)", 0);
  __pyx_v_logl_kwargs = PyDict_New(); if (unlikely(!__pyx_v_logl_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_logl_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_params,&__pyx_n_s_prior,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_params)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prior);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_logl_kwargs, values, pos_args, "_logposterior") < 0)) __PYX_ERR(0, 304, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_params = values[0];
    __pyx_v_prior = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_logposterior", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 304, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_logl_kwargs); __pyx_v_logl_kwargs = 0;
  __Pyx_AddTraceback("pyross.inference.SIR_type._logposterior", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_16_logposterior(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_params, __pyx_v_prior, __pyx_v_logl_kwargs);

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_logl_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_16_logposterior(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_params, PyObject *__pyx_v_prior, PyObject *__pyx_v_logl_kwargs) {
  PyObject *__pyx_v_logl = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_logposterior", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pyross.inference.SIR_type._logposterior", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_logl);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0305:         """Compute the log-posterior (up to a constant) of the model."""
+0306:         logl = self._loglikelihood(params, **logl_kwargs)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_loglikelihood); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_params);
  __Pyx_GIVEREF(__pyx_v_params);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_params);
  __pyx_t_3 = PyDict_Copy(__pyx_v_logl_kwargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_logl = __pyx_t_4;
  __pyx_t_4 = 0;
+0307:         return logl + np.sum(prior.logpdf(params))
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sum); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_prior, __pyx_n_s_logpdf); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v_params) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_params);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Add(__pyx_v_logl, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 0308: 
+0309:     def _infer_to_minimize(self, params, grad=0, **logp_kwargs):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_19_infer_to_minimize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_18_infer_to_minimize[] = "Objective function for minimization call in infer.";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_19_infer_to_minimize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_params = 0;
  CYTHON_UNUSED PyObject *__pyx_v_grad = 0;
  PyObject *__pyx_v_logp_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_infer_to_minimize (wrapper)", 0);
  __pyx_v_logp_kwargs = PyDict_New(); if (unlikely(!__pyx_v_logp_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_logp_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_params,&__pyx_n_s_grad,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_params)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_grad);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_logp_kwargs, values, pos_args, "_infer_to_minimize") < 0)) __PYX_ERR(0, 309, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_params = values[0];
    __pyx_v_grad = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_infer_to_minimize", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 309, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_logp_kwargs); __pyx_v_logp_kwargs = 0;
  __Pyx_AddTraceback("pyross.inference.SIR_type._infer_to_minimize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_18_infer_to_minimize(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_params, __pyx_v_grad, __pyx_v_logp_kwargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_logp_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_18_infer_to_minimize(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_params, CYTHON_UNUSED PyObject *__pyx_v_grad, PyObject *__pyx_v_logp_kwargs) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_infer_to_minimize", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type._infer_to_minimize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0310:         """Objective function for minimization call in infer."""
+0311:         return -self._logposterior(params, **logp_kwargs)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_logposterior); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 311, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_params);
  __Pyx_GIVEREF(__pyx_v_params);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_params);
  __pyx_t_3 = PyDict_Copy(__pyx_v_logp_kwargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 311, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 311, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Negative(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 311, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 0312: 
+0313:     def infer(self, x, Tf, prior_dict, contactMatrix=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_21infer(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_20infer[] = "\n        Compute the maximum a-posteriori (MAP) estimate for all desired parameters, including control parameters, for an SIR type model\n        with fully observed classes. If `generator` is specified, the lockdown is modelled by scaling the contact matrices for contact at work,\n        school, and other (but not home). This function infers the scaling parameters (can be age dependent) assuming that full data\n        on all classes is available (with latent variables, use `latent_infer`).\n\n        Parameters\n        ----------\n        x: 2d numpy.array\n            Observed trajectory (number of data points x (age groups * model classes))\n        Tf: float\n            Total time of the trajectory\n        prior_dict: dict\n            A dictionary containing priors for parameters (can include both model and intervention parameters). See examples.\n        contactMatrix: callable, optional\n            A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.\n            Either a contactMatrix or a generator must be specified.\n        generator: pyross.contactMatrix, optional\n            A pyross.contactMatrix object that generates a contact matrix function with specified lockdown\n            parameters.\n            Either a contactMatrix or a generator must be specified.\n        intervention_fun: callable, optional\n            The calling signature is `intervention_func(t, **kwargs)`,\n            where t is time and kwargs are other keyword arguments for the function.\n            The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.\n            The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.\n            If not set, assume intervention that's constant in time.\n            See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.\n        tangent: bool, optional\n            Set to True to use tangent space infere""nce. Default is false.\n        verbose: bool, optional\n            Set to True to see intermediate outputs from the optimizer.\n        ftol: double\n            Relative tolerance of logp\n        global_max_iter: int, optional\n            Number of global optimisations performed.\n        local_max_iter: int, optional\n            Number of local optimisation performed.\n        global_atol: float\n            The absolute tolerance for global optimisation.\n        enable_global: bool, optional\n            Set to True to enable global optimisation.\n        enable_local: bool, optional\n            Set to True to enable local optimisation.\n        cma_processes: int, optional\n            Number of parallel processes used for global optimisation.\n        cma_population: int, optional\n            The number of samples used in each step of the CMA algorithm.\n        cma_random_seed: int (between 0 and 2**32-1)\n            Random seed for the optimisation algorithms. By default it is generated from numpy.random.randint.\n\n        Returns\n        -------\n        output_dict: dict\n            Dictionary of MAP estimates, containing the following keys for users:\n\n            params_dict: dict\n                Dictionary for MAP estimates of the model parameters.\n            control_params_dict: dict\n                Dictionary for MAP estimates of the control parameters (if requested).\n            -logp: float\n                Value of -logp at MAP.\n        Note\n        ----\n        This function combines the functionality of `infer_parameters` and `infer_control`,\n        which will be deprecated.\n        To infer model parameters only, specify a fixed `contactMatrix` function.\n        To infer control parameters only, specify a `generator` and do not specify priors for model parameters.\n\n        Examples\n        --------\n        An example of prior_dict to set priors for alpha and beta, where alpha\n        is age dependent and we want to i""nfer its scale parameters rather than\n        each component individually. The prior distribution is assumed to be\n        log-normal with the specified mean and standard deviation.\n\n        >>> prior_dict = {\n                'alpha':{\n                    'mean': [0.5, 0.2],\n                    'infer_scale': True,\n                    'scale_factor_std': 1,\n                    'scale_factor_bounds': [0.1, 10],\n                    'prior_fun': 'truncnorm'\n                },\n                'beta':{\n                    'mean': 0.02,\n                    'std': 0.1,\n                    'bounds': [1e-4, 1],\n                    'prior_fun': 'lognorm'\n                }\n            }\n\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_21infer(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_prior_dict = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_verbose = 0;
  PyObject *__pyx_v_ftol = 0;
  PyObject *__pyx_v_global_max_iter = 0;
  PyObject *__pyx_v_local_max_iter = 0;
  PyObject *__pyx_v_global_atol = 0;
  PyObject *__pyx_v_enable_global = 0;
  PyObject *__pyx_v_enable_local = 0;
  PyObject *__pyx_v_cma_processes = 0;
  PyObject *__pyx_v_cma_population = 0;
  PyObject *__pyx_v_cma_random_seed = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infer (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_Tf,&__pyx_n_s_prior_dict,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_tangent,&__pyx_n_s_verbose,&__pyx_n_s_ftol,&__pyx_n_s_global_max_iter,&__pyx_n_s_local_max_iter,&__pyx_n_s_global_atol,&__pyx_n_s_enable_global,&__pyx_n_s_enable_local,&__pyx_n_s_cma_processes,&__pyx_n_s_cma_population,&__pyx_n_s_cma_random_seed,0};
    PyObject* values[17] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[3] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_20infer(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_Tf, PyObject *__pyx_v_prior_dict, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_tangent, PyObject *__pyx_v_verbose, PyObject *__pyx_v_ftol, PyObject *__pyx_v_global_max_iter, PyObject *__pyx_v_local_max_iter, PyObject *__pyx_v_global_atol, PyObject *__pyx_v_enable_global, PyObject *__pyx_v_enable_local, PyObject *__pyx_v_cma_processes, PyObject *__pyx_v_cma_population, PyObject *__pyx_v_cma_random_seed) {
  PyObject *__pyx_v_prior_names = NULL;
  PyObject *__pyx_v_keys = NULL;
  PyObject *__pyx_v_guess = NULL;
  PyObject *__pyx_v_stds = NULL;
  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
  PyObject *__pyx_v_bounds = NULL;
  PyObject *__pyx_v_flat_guess_range = NULL;
  PyObject *__pyx_v_is_scale_parameter = NULL;
  PyObject *__pyx_v_scaled_guesses = NULL;
  PyObject *__pyx_v_prior = NULL;
  PyObject *__pyx_v_cma_stds = NULL;
  PyObject *__pyx_v_minimize_args = NULL;
  PyObject *__pyx_v_res = NULL;
  PyObject *__pyx_v_orig_params = NULL;
  PyObject *__pyx_v_map_params_dict = NULL;
  PyObject *__pyx_v_map_control_params_dict = NULL;
  PyObject *__pyx_v_l_post = NULL;
  PyObject *__pyx_v_l_prior = NULL;
  PyObject *__pyx_v_l_like = NULL;
  PyObject *__pyx_v_output_dict = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infer", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("pyross.inference.SIR_type.infer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_prior_names);
  __Pyx_XDECREF(__pyx_v_keys);
  __Pyx_XDECREF(__pyx_v_guess);
  __Pyx_XDECREF(__pyx_v_stds);
  __Pyx_XDECREF(__pyx_v__);
  __Pyx_XDECREF(__pyx_v_bounds);
  __Pyx_XDECREF(__pyx_v_flat_guess_range);
  __Pyx_XDECREF(__pyx_v_is_scale_parameter);
  __Pyx_XDECREF(__pyx_v_scaled_guesses);
  __Pyx_XDECREF(__pyx_v_prior);
  __Pyx_XDECREF(__pyx_v_cma_stds);
  __Pyx_XDECREF(__pyx_v_minimize_args);
  __Pyx_XDECREF(__pyx_v_res);
  __Pyx_XDECREF(__pyx_v_orig_params);
  __Pyx_XDECREF(__pyx_v_map_params_dict);
  __Pyx_XDECREF(__pyx_v_map_control_params_dict);
  __Pyx_XDECREF(__pyx_v_l_post);
  __Pyx_XDECREF(__pyx_v_l_prior);
  __Pyx_XDECREF(__pyx_v_l_like);
  __Pyx_XDECREF(__pyx_v_output_dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0314:               generator=None, intervention_fun=None, tangent=False,
    values[4] = ((PyObject *)Py_None);
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_False);
+0315:               verbose=False, ftol=1e-6,
    values[7] = ((PyObject *)Py_False);
    values[8] = ((PyObject *)__pyx_float_1eneg_6);
    values[9] = ((PyObject *)__pyx_int_100);
    values[10] = ((PyObject *)__pyx_int_100);
    values[11] = ((PyObject *)__pyx_float_1_);
 0316:               global_max_iter=100, local_max_iter=100, global_atol=1.,
+0317:               enable_global=True, enable_local=True,
    values[12] = ((PyObject *)Py_True);
    values[13] = ((PyObject *)Py_True);
    values[14] = ((PyObject *)__pyx_int_0);
    values[15] = ((PyObject *)__pyx_int_16);
+0318:               cma_processes=0, cma_population=16, cma_random_seed=None):
    values[16] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("infer", 0, 3, 17, 1); __PYX_ERR(0, 313, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prior_dict)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("infer", 0, 3, 17, 2); __PYX_ERR(0, 313, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_verbose);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ftol);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_global_max_iter);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_local_max_iter);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_global_atol);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_enable_global);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_enable_local);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cma_processes);
          if (value) { values[14] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 15:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cma_population);
          if (value) { values[15] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 16:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cma_random_seed);
          if (value) { values[16] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "infer") < 0)) __PYX_ERR(0, 313, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_x = values[0];
    __pyx_v_Tf = values[1];
    __pyx_v_prior_dict = values[2];
    __pyx_v_contactMatrix = values[3];
    __pyx_v_generator = values[4];
    __pyx_v_intervention_fun = values[5];
    __pyx_v_tangent = values[6];
    __pyx_v_verbose = values[7];
    __pyx_v_ftol = values[8];
    __pyx_v_global_max_iter = values[9];
    __pyx_v_local_max_iter = values[10];
    __pyx_v_global_atol = values[11];
    __pyx_v_enable_global = values[12];
    __pyx_v_enable_local = values[13];
    __pyx_v_cma_processes = values[14];
    __pyx_v_cma_population = values[15];
    __pyx_v_cma_random_seed = values[16];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("infer", 0, 3, 17, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 313, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.infer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_20infer(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_x, __pyx_v_Tf, __pyx_v_prior_dict, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_verbose, __pyx_v_ftol, __pyx_v_global_max_iter, __pyx_v_local_max_iter, __pyx_v_global_atol, __pyx_v_enable_global, __pyx_v_enable_local, __pyx_v_cma_processes, __pyx_v_cma_population, __pyx_v_cma_random_seed);
 0319:         """
 0320:         Compute the maximum a-posteriori (MAP) estimate for all desired parameters, including control parameters, for an SIR type model
 0321:         with fully observed classes. If `generator` is specified, the lockdown is modelled by scaling the contact matrices for contact at work,
 0322:         school, and other (but not home). This function infers the scaling parameters (can be age dependent) assuming that full data
 0323:         on all classes is available (with latent variables, use `latent_infer`).
 0324: 
 0325:         Parameters
 0326:         ----------
 0327:         x: 2d numpy.array
 0328:             Observed trajectory (number of data points x (age groups * model classes))
 0329:         Tf: float
 0330:             Total time of the trajectory
 0331:         prior_dict: dict
 0332:             A dictionary containing priors for parameters (can include both model and intervention parameters). See examples.
 0333:         contactMatrix: callable, optional
 0334:             A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.
 0335:             Either a contactMatrix or a generator must be specified.
 0336:         generator: pyross.contactMatrix, optional
 0337:             A pyross.contactMatrix object that generates a contact matrix function with specified lockdown
 0338:             parameters.
 0339:             Either a contactMatrix or a generator must be specified.
 0340:         intervention_fun: callable, optional
 0341:             The calling signature is `intervention_func(t, **kwargs)`,
 0342:             where t is time and kwargs are other keyword arguments for the function.
 0343:             The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.
 0344:             The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.
 0345:             If not set, assume intervention that's constant in time.
 0346:             See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.
 0347:         tangent: bool, optional
 0348:             Set to True to use tangent space inference. Default is false.
 0349:         verbose: bool, optional
 0350:             Set to True to see intermediate outputs from the optimizer.
 0351:         ftol: double
 0352:             Relative tolerance of logp
 0353:         global_max_iter: int, optional
 0354:             Number of global optimisations performed.
 0355:         local_max_iter: int, optional
 0356:             Number of local optimisation performed.
 0357:         global_atol: float
 0358:             The absolute tolerance for global optimisation.
 0359:         enable_global: bool, optional
 0360:             Set to True to enable global optimisation.
 0361:         enable_local: bool, optional
 0362:             Set to True to enable local optimisation.
 0363:         cma_processes: int, optional
 0364:             Number of parallel processes used for global optimisation.
 0365:         cma_population: int, optional
 0366:             The number of samples used in each step of the CMA algorithm.
 0367:         cma_random_seed: int (between 0 and 2**32-1)
 0368:             Random seed for the optimisation algorithms. By default it is generated from numpy.random.randint.
 0369: 
 0370:         Returns
 0371:         -------
 0372:         output_dict: dict
 0373:             Dictionary of MAP estimates, containing the following keys for users:
 0374: 
 0375:             params_dict: dict
 0376:                 Dictionary for MAP estimates of the model parameters.
 0377:             control_params_dict: dict
 0378:                 Dictionary for MAP estimates of the control parameters (if requested).
 0379:             -logp: float
 0380:                 Value of -logp at MAP.
 0381:         Note
 0382:         ----
 0383:         This function combines the functionality of `infer_parameters` and `infer_control`,
 0384:         which will be deprecated.
 0385:         To infer model parameters only, specify a fixed `contactMatrix` function.
 0386:         To infer control parameters only, specify a `generator` and do not specify priors for model parameters.
 0387: 
 0388:         Examples
 0389:         --------
 0390:         An example of prior_dict to set priors for alpha and beta, where alpha
 0391:         is age dependent and we want to infer its scale parameters rather than
 0392:         each component individually. The prior distribution is assumed to be
 0393:         log-normal with the specified mean and standard deviation.
 0394: 
 0395:         >>> prior_dict = {
 0396:                 'alpha':{
 0397:                     'mean': [0.5, 0.2],
 0398:                     'infer_scale': True,
 0399:                     'scale_factor_std': 1,
 0400:                     'scale_factor_bounds': [0.1, 10],
 0401:                     'prior_fun': 'truncnorm'
 0402:                 },
 0403:                 'beta':{
 0404:                     'mean': 0.02,
 0405:                     'std': 0.1,
 0406:                     'bounds': [1e-4, 1],
 0407:                     'prior_fun': 'lognorm'
 0408:                 }
 0409:             }
 0410: 
 0411:         """
 0412: 
 0413: 
 0414:         # Sanity checks of the inputs
+0415:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 415, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 415, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_intervention_fun);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0416: 
 0417:         # Read in parameter priors
+0418:         prior_names, keys, guess, stds, _, _, bounds, \
  __pyx_v_prior_names = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_keys = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_guess = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_stds = __pyx_t_6;
  __pyx_t_6 = 0;
  __pyx_v__ = __pyx_t_7;
  __pyx_t_7 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_8);
  __pyx_t_8 = 0;
  __pyx_v_bounds = __pyx_t_9;
  __pyx_t_9 = 0;
  __pyx_v_flat_guess_range = __pyx_t_10;
  __pyx_t_10 = 0;
  __pyx_v_is_scale_parameter = __pyx_t_11;
  __pyx_t_11 = 0;
  __pyx_v_scaled_guesses = __pyx_t_12;
  __pyx_t_12 = 0;
 0419:         flat_guess_range, is_scale_parameter, scaled_guesses  \
+0420:                 = pyross.utils.parse_param_prior_dict(prior_dict, self.M, check_length=(not self.param_mapping_enabled))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyross); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_utils); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_parse_param_prior_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->M); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_prior_dict);
  __Pyx_GIVEREF(__pyx_v_prior_dict);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_prior_dict);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyBool_FromLong((!(__pyx_v_self->param_mapping_enabled != 0))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_check_length, __pyx_t_3) < 0) __PYX_ERR(0, 420, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 10)) {
      if (size > 10) __Pyx_RaiseTooManyValuesError(10);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 418, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_7 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 5); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 6); 
      __pyx_t_10 = PyTuple_GET_ITEM(sequence, 7); 
      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 8); 
      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 9); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_7 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 5); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 6); 
      __pyx_t_10 = PyList_GET_ITEM(sequence, 7); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 8); 
      __pyx_t_12 = PyList_GET_ITEM(sequence, 9); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_t_12);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[10] = {&__pyx_t_2,&__pyx_t_5,&__pyx_t_1,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12};
      for (i=0; i < 10; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 418, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[10] = {&__pyx_t_2,&__pyx_t_5,&__pyx_t_1,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12};
    __pyx_t_13 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 418, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_14 = Py_TYPE(__pyx_t_13)->tp_iternext;
    for (index=0; index < 10; index++) {
      PyObject* item = __pyx_t_14(__pyx_t_13); if (unlikely(!item)) goto __pyx_L3_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 10) < 0) __PYX_ERR(0, 418, __pyx_L1_error)
    __pyx_t_14 = NULL;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_14 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 418, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
+0421:         prior = Prior(prior_names, bounds, guess, stds)
  __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_Prior); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_11 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
    __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12);
    if (likely(__pyx_t_11)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_12, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_12)) {
    PyObject *__pyx_temp[5] = {__pyx_t_11, __pyx_v_prior_names, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 421, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) {
    PyObject *__pyx_temp[5] = {__pyx_t_11, __pyx_v_prior_names, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 421, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  {
    __pyx_t_10 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 421, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__pyx_t_11) {
      __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11); __pyx_t_11 = NULL;
    }
    __Pyx_INCREF(__pyx_v_prior_names);
    __Pyx_GIVEREF(__pyx_v_prior_names);
    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_4, __pyx_v_prior_names);
    __Pyx_INCREF(__pyx_v_bounds);
    __Pyx_GIVEREF(__pyx_v_bounds);
    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_4, __pyx_v_bounds);
    __Pyx_INCREF(__pyx_v_guess);
    __Pyx_GIVEREF(__pyx_v_guess);
    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_4, __pyx_v_guess);
    __Pyx_INCREF(__pyx_v_stds);
    __Pyx_GIVEREF(__pyx_v_stds);
    PyTuple_SET_ITEM(__pyx_t_10, 3+__pyx_t_4, __pyx_v_stds);
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 421, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_v_prior = __pyx_t_3;
  __pyx_t_3 = 0;
+0422:         cma_stds = np.minimum(stds, (bounds[:, 1] - bounds[:, 0])/3)
  __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_minimum); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_v_bounds, __pyx_tuple__3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_11 = __Pyx_PyObject_GetItem(__pyx_v_bounds, __pyx_tuple__2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_9 = PyNumber_Subtract(__pyx_t_12, __pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = __Pyx_PyInt_TrueDivideObjC(__pyx_t_9, __pyx_int_3, 3, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_10)) {
    PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_v_stds, __pyx_t_11};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 422, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
    PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_v_stds, __pyx_t_11};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 422, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else
  #endif
  {
    __pyx_t_12 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 422, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    if (__pyx_t_9) {
      __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_9); __pyx_t_9 = NULL;
    }
    __Pyx_INCREF(__pyx_v_stds);
    __Pyx_GIVEREF(__pyx_v_stds);
    PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_4, __pyx_v_stds);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_4, __pyx_t_11);
    __pyx_t_11 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_12, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 422, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  }
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_v_cma_stds = __pyx_t_3;
  __pyx_t_3 = 0;
+0423:         minimize_args = {'keys':keys, 'x':x, 'Tf':Tf,
  __pyx_t_3 = __Pyx_PyDict_NewPresized(10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_keys, __pyx_v_keys) < 0) __PYX_ERR(0, 423, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_x, __pyx_v_x) < 0) __PYX_ERR(0, 423, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_Tf, __pyx_v_Tf) < 0) __PYX_ERR(0, 423, __pyx_L1_error)
+0424:                          'flat_guess_range':flat_guess_range,
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_flat_guess_range, __pyx_v_flat_guess_range) < 0) __PYX_ERR(0, 423, __pyx_L1_error)
+0425:                          'is_scale_parameter':is_scale_parameter,
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_is_scale_parameter, __pyx_v_is_scale_parameter) < 0) __PYX_ERR(0, 423, __pyx_L1_error)
+0426:                          'scaled_guesses': scaled_guesses,
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_scaled_guesses, __pyx_v_scaled_guesses) < 0) __PYX_ERR(0, 423, __pyx_L1_error)
+0427:                          'generator':generator, 'prior':prior,
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_generator, __pyx_v_generator) < 0) __PYX_ERR(0, 423, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_prior, __pyx_v_prior) < 0) __PYX_ERR(0, 423, __pyx_L1_error)
+0428:                          'intervention_fun': intervention_fun, 'tangent': tangent}
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_intervention_fun, __pyx_v_intervention_fun) < 0) __PYX_ERR(0, 423, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_tangent, __pyx_v_tangent) < 0) __PYX_ERR(0, 423, __pyx_L1_error)
  __pyx_v_minimize_args = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+0429:         res = minimization(self._infer_to_minimize, guess, bounds, ftol=ftol, global_max_iter=global_max_iter,
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_minimization); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 429, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_infer_to_minimize); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 429, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 429, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10);
  __Pyx_INCREF(__pyx_v_guess);
  __Pyx_GIVEREF(__pyx_v_guess);
  PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_guess);
  __Pyx_INCREF(__pyx_v_bounds);
  __Pyx_GIVEREF(__pyx_v_bounds);
  PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_v_bounds);
  __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyDict_NewPresized(12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 429, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_ftol, __pyx_v_ftol) < 0) __PYX_ERR(0, 429, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_global_max_iter, __pyx_v_global_max_iter) < 0) __PYX_ERR(0, 429, __pyx_L1_error)
/* … */
  __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_12, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 429, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_v_res = __pyx_t_11;
  __pyx_t_11 = 0;
+0430:                            local_max_iter=local_max_iter, global_atol=global_atol,
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_local_max_iter, __pyx_v_local_max_iter) < 0) __PYX_ERR(0, 429, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_global_atol, __pyx_v_global_atol) < 0) __PYX_ERR(0, 429, __pyx_L1_error)
+0431:                            enable_global=enable_global, enable_local=enable_local, cma_processes=cma_processes,
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_enable_global, __pyx_v_enable_global) < 0) __PYX_ERR(0, 429, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_enable_local, __pyx_v_enable_local) < 0) __PYX_ERR(0, 429, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_cma_processes, __pyx_v_cma_processes) < 0) __PYX_ERR(0, 429, __pyx_L1_error)
+0432:                            cma_population=cma_population, cma_stds=cma_stds, verbose=verbose, args_dict=minimize_args, cma_random_seed=cma_random_seed)
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_cma_population, __pyx_v_cma_population) < 0) __PYX_ERR(0, 429, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_cma_stds, __pyx_v_cma_stds) < 0) __PYX_ERR(0, 429, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_verbose, __pyx_v_verbose) < 0) __PYX_ERR(0, 429, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_args_dict, __pyx_v_minimize_args) < 0) __PYX_ERR(0, 429, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_cma_random_seed, __pyx_v_cma_random_seed) < 0) __PYX_ERR(0, 429, __pyx_L1_error)
 0433: 
+0434:         orig_params = pyross.utils.unflatten_parameters(res[0], flat_guess_range,
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_pyross); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_utils); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_unflatten_parameters); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_res, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
+0435:                                              is_scale_parameter, scaled_guesses)
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_10)) {
    PyObject *__pyx_temp[5] = {__pyx_t_3, __pyx_t_12, __pyx_v_flat_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_guesses};
    __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 434, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
    PyObject *__pyx_temp[5] = {__pyx_t_3, __pyx_t_12, __pyx_v_flat_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_guesses};
    __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 434, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 434, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_4, __pyx_t_12);
    __Pyx_INCREF(__pyx_v_flat_guess_range);
    __Pyx_GIVEREF(__pyx_v_flat_guess_range);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_4, __pyx_v_flat_guess_range);
    __Pyx_INCREF(__pyx_v_is_scale_parameter);
    __Pyx_GIVEREF(__pyx_v_is_scale_parameter);
    PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_4, __pyx_v_is_scale_parameter);
    __Pyx_INCREF(__pyx_v_scaled_guesses);
    __Pyx_GIVEREF(__pyx_v_scaled_guesses);
    PyTuple_SET_ITEM(__pyx_t_9, 3+__pyx_t_4, __pyx_v_scaled_guesses);
    __pyx_t_12 = 0;
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_9, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 434, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_v_orig_params = __pyx_t_11;
  __pyx_t_11 = 0;
 0436: 
+0437:         map_params_dict, map_control_params_dict = self.fill_params_dict(keys, orig_params, return_additional_params=True)
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_fill_params_dict); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 437, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 437, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_INCREF(__pyx_v_keys);
  __Pyx_GIVEREF(__pyx_v_keys);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_keys);
  __Pyx_INCREF(__pyx_v_orig_params);
  __Pyx_GIVEREF(__pyx_v_orig_params);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_orig_params);
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 437, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_return_additional_params, Py_True) < 0) __PYX_ERR(0, 437, __pyx_L1_error)
  __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_10, __pyx_t_9); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 437, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_12))) || (PyList_CheckExact(__pyx_t_12))) {
    PyObject* sequence = __pyx_t_12;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 437, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_9 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_10 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_10);
    #else
    __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    #endif
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_11 = PyObject_GetIter(__pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_14 = Py_TYPE(__pyx_t_11)->tp_iternext;
    index = 0; __pyx_t_9 = __pyx_t_14(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_9);
    index = 1; __pyx_t_10 = __pyx_t_14(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_10);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_11), 2) < 0) __PYX_ERR(0, 437, __pyx_L1_error)
    __pyx_t_14 = NULL;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_14 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 437, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  __pyx_v_map_params_dict = __pyx_t_9;
  __pyx_t_9 = 0;
  __pyx_v_map_control_params_dict = __pyx_t_10;
  __pyx_t_10 = 0;
+0438:         self.set_params(map_params_dict)
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_params); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_9 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
    }
  }
  __pyx_t_12 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_9, __pyx_v_map_params_dict) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_map_params_dict);
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 0439: 
+0440:         if generator is not None:
  __pyx_t_15 = (__pyx_v_generator != Py_None);
  __pyx_t_16 = (__pyx_t_15 != 0);
  if (__pyx_t_16) {
/* … */
  }
+0441:             if intervention_fun is None:
    __pyx_t_16 = (__pyx_v_intervention_fun == Py_None);
    __pyx_t_15 = (__pyx_t_16 != 0);
    if (__pyx_t_15) {
/* … */
      goto __pyx_L8;
    }
+0442:                 self.contactMatrix = generator.constant_contactMatrix(**map_control_params_dict)
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_constant_contactMatrix); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 442, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      if (unlikely(__pyx_v_map_control_params_dict == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
        __PYX_ERR(0, 442, __pyx_L1_error)
      }
      if (likely(PyDict_CheckExact(__pyx_v_map_control_params_dict))) {
        __pyx_t_10 = PyDict_Copy(__pyx_v_map_control_params_dict); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 442, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
      } else {
        __pyx_t_10 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_map_control_params_dict, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 442, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
      }
      __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_empty_tuple, __pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 442, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GIVEREF(__pyx_t_9);
      __Pyx_GOTREF(__pyx_v_self->contactMatrix);
      __Pyx_DECREF(__pyx_v_self->contactMatrix);
      __pyx_v_self->contactMatrix = __pyx_t_9;
      __pyx_t_9 = 0;
 0443:             else:
+0444:                 self.contactMatrix = generator.intervention_custom_temporal(intervention_fun, **map_control_params_dict)
    /*else*/ {
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_intervention_custom_temporal); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 444, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 444, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_INCREF(__pyx_v_intervention_fun);
      __Pyx_GIVEREF(__pyx_v_intervention_fun);
      PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_intervention_fun);
      if (unlikely(__pyx_v_map_control_params_dict == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
        __PYX_ERR(0, 444, __pyx_L1_error)
      }
      if (likely(PyDict_CheckExact(__pyx_v_map_control_params_dict))) {
        __pyx_t_12 = PyDict_Copy(__pyx_v_map_control_params_dict); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 444, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
      } else {
        __pyx_t_12 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_map_control_params_dict, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 444, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
      }
      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_10, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 444, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_GIVEREF(__pyx_t_11);
      __Pyx_GOTREF(__pyx_v_self->contactMatrix);
      __Pyx_DECREF(__pyx_v_self->contactMatrix);
      __pyx_v_self->contactMatrix = __pyx_t_11;
      __pyx_t_11 = 0;
    }
    __pyx_L8:;
 0445: 
+0446:         l_post = -res[1]
  __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_res, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 446, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_12 = PyNumber_Negative(__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 446, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_v_l_post = __pyx_t_12;
  __pyx_t_12 = 0;
+0447:         l_prior = np.sum(prior.logpdf(res[0]))
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_sum); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_prior, __pyx_n_s_logpdf); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_res, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_8 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_9, function);
    }
  }
  __pyx_t_11 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_8, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
    }
  }
  __pyx_t_12 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_9, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_11);
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_v_l_prior = __pyx_t_12;
  __pyx_t_12 = 0;
+0448:         l_like = l_post - l_prior
  __pyx_t_12 = PyNumber_Subtract(__pyx_v_l_post, __pyx_v_l_prior); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 448, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_v_l_like = __pyx_t_12;
  __pyx_t_12 = 0;
 0449:         output_dict = {
+0450:             'params_dict': map_params_dict, 'flat_params': res[0], 'param_keys': keys,
  __pyx_t_12 = __Pyx_PyDict_NewPresized(10); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 450, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_params_dict, __pyx_v_map_params_dict) < 0) __PYX_ERR(0, 450, __pyx_L1_error)
  __pyx_t_10 = __Pyx_GetItemInt(__pyx_v_res, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 450, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_flat_params, __pyx_t_10) < 0) __PYX_ERR(0, 450, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_param_keys, __pyx_v_keys) < 0) __PYX_ERR(0, 450, __pyx_L1_error)
+0451:             'log_posterior':l_post, 'log_prior':l_prior, 'log_likelihood':l_like,
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_log_posterior, __pyx_v_l_post) < 0) __PYX_ERR(0, 450, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_log_prior, __pyx_v_l_prior) < 0) __PYX_ERR(0, 450, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_log_likelihood, __pyx_v_l_like) < 0) __PYX_ERR(0, 450, __pyx_L1_error)
+0452:             'is_scale_parameter':is_scale_parameter,
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_is_scale_parameter, __pyx_v_is_scale_parameter) < 0) __PYX_ERR(0, 450, __pyx_L1_error)
+0453:             'param_guess_range':flat_guess_range,
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_param_guess_range, __pyx_v_flat_guess_range) < 0) __PYX_ERR(0, 450, __pyx_L1_error)
+0454:             'scaled_param_guesses':scaled_guesses,
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_scaled_param_guesses, __pyx_v_scaled_guesses) < 0) __PYX_ERR(0, 450, __pyx_L1_error)
+0455:             'prior': prior
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_prior, __pyx_v_prior) < 0) __PYX_ERR(0, 450, __pyx_L1_error)
  __pyx_v_output_dict = ((PyObject*)__pyx_t_12);
  __pyx_t_12 = 0;
 0456:         }
+0457:         if map_control_params_dict != {}:
  __pyx_t_12 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 457, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_10 = PyObject_RichCompare(__pyx_v_map_control_params_dict, __pyx_t_12, Py_NE); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 457, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_15 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 457, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (__pyx_t_15) {
/* … */
  }
+0458:             output_dict['control_params_dict'] = map_control_params_dict
    if (unlikely(PyDict_SetItem(__pyx_v_output_dict, __pyx_n_u_control_params_dict, __pyx_v_map_control_params_dict) < 0)) __PYX_ERR(0, 458, __pyx_L1_error)
 0459: 
+0460:         return output_dict
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_output_dict);
  __pyx_r = __pyx_v_output_dict;
  goto __pyx_L0;
 0461: 
+0462:     def _nested_sampling_prior_transform(self, x, prior=None):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_23_nested_sampling_prior_transform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_23_nested_sampling_prior_transform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_prior = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_nested_sampling_prior_transform (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_prior,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prior);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_nested_sampling_prior_transform") < 0)) __PYX_ERR(0, 462, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_x = values[0];
    __pyx_v_prior = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_nested_sampling_prior_transform", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 462, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type._nested_sampling_prior_transform", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_22_nested_sampling_prior_transform(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_x, __pyx_v_prior);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_22_nested_sampling_prior_transform(CYTHON_UNUSED struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_prior) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_nested_sampling_prior_transform", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyross.inference.SIR_type._nested_sampling_prior_transform", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0463:         return prior.ppf(x)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_prior, __pyx_n_s_ppf); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 463, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_x) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_x);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 463, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0464: 
+0465:     def infer_nested_sampling(self, x, Tf, prior_dict, contactMatrix=None, generator=None, intervention_fun=None, tangent=False,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_25infer_nested_sampling(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_24infer_nested_sampling[] = "\n        Compute the log-evidence and weighted samples of the a-posteriori distribution of the parameters of a SIR type model\n        using nested sampling as implemented in the `dynesty` Python package. This function assumes that full data on\n        all classes is available.\n\n        Parameters\n        ----------\n        x: 2d numpy.array\n            Observed trajectory (number of data points x (age groups * model classes))\n        Tf: float\n            Total time of the trajectory\n        prior_dict: dict\n            A dictionary containing priors for parameters (can include both model and intervention parameters). See examples.\n        contactMatrix: callable, optional\n            A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.\n            Either a contactMatrix or a generator must be specified.\n        generator: pyross.contactMatrix, optional\n            A pyross.contactMatrix object that generates a contact matrix function with specified lockdown\n            parameters.\n            Either a contactMatrix or a generator must be specified.\n        intervention_fun: callable, optional\n            The calling signature is `intervention_func(t, **kwargs)`,\n            where t is time and kwargs are other keyword arguments for the function.\n            The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.\n            The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.\n            If not set, assume intervention that's constant in time.\n            See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.\n        tangent: bool, optional\n            Set to True to use tangent space inference. Default is false.\n        verbose: bool, optional\n            Set to True to see intermediate outputs from the nested sampling procedure.\n        nprocesses: int, optional\n            The number of processes u""sed for parallel evaluation of the likelihood.\n        queue_size: int, optional\n            Size of internal queue of likelihood values, default is nprocesses if multiprocessing is used.\n        maxiter: int, optional\n            The maximum number of iterations. Default is no limit.\n        maxcall:int, optional\n            The maximum number of calls to the likelihood function. Default no limit.\n        dlogz: float, optional\n            The iteration terminates if the estimated contribution of the remaining prior volume to the total evidence\n            falls below this threshold. Default value is `1e-3 * (nlive - 1) + 0.01` if `add_live==True`, 0.01 otherwise.\n        n_effective: float, optional\n            The iteration terminates if the number of effective posterior samples reaches this values. Default is no limit.\n        add_live: bool, optional\n            Determines whether to add the remaining set of live points to the set of samples. Default is True.\n        sampler: dynesty.NestedSampler, optional\n            Continue running an instance of a nested sampler until the termination criteria are met.\n        **dynesty_args:\n            Arguments passed through to the construction of the dynesty.NestedSampler constructor. Relevant entries\n            are (this is not comprehensive, for details see the documentation of dynesty):\n\n            nlive: int, optional\n                The number of live points. Default is 500.\n            bound: {'none', 'single', 'multi', 'balls', 'cubes'}, optional\n                Method used to approximately bound the prior using the current set of live points. Default is 'multi'.\n            sample:  {'auto', 'unif', 'rwalk', 'rstagger', 'slice', 'rslice', 'hslice', callable}, optional\n                Method used to sample uniformly within the likelihood constraint, conditioned on the provided bounds.\n\n        Returns\n        -------\n        sampler: dynesty.NestedSampler\n            The state of ""the sampler after termination of the nested sampling run.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_25infer_nested_sampling(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_prior_dict = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_verbose = 0;
  PyObject *__pyx_v_nprocesses = 0;
  PyObject *__pyx_v_queue_size = 0;
  PyObject *__pyx_v_maxiter = 0;
  PyObject *__pyx_v_maxcall = 0;
  PyObject *__pyx_v_dlogz = 0;
  PyObject *__pyx_v_n_effective = 0;
  PyObject *__pyx_v_add_live = 0;
  PyObject *__pyx_v_sampler = 0;
  PyObject *__pyx_v_dynesty_args = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infer_nested_sampling (wrapper)", 0);
  __pyx_v_dynesty_args = PyDict_New(); if (unlikely(!__pyx_v_dynesty_args)) return NULL;
  __Pyx_GOTREF(__pyx_v_dynesty_args);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_Tf,&__pyx_n_s_prior_dict,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_tangent,&__pyx_n_s_verbose,&__pyx_n_s_nprocesses,&__pyx_n_s_queue_size,&__pyx_n_s_maxiter,&__pyx_n_s_maxcall,&__pyx_n_s_dlogz,&__pyx_n_s_n_effective,&__pyx_n_s_add_live,&__pyx_n_s_sampler,0};
    PyObject* values[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[3] = ((PyObject *)Py_None);
    values[4] = ((PyObject *)Py_None);
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_False);
/* … */
  /* function exit code */
  __Pyx_XDECREF(__pyx_v_dynesty_args);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_24infer_nested_sampling(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_Tf, PyObject *__pyx_v_prior_dict, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_tangent, PyObject *__pyx_v_verbose, PyObject *__pyx_v_nprocesses, PyObject *__pyx_v_queue_size, PyObject *__pyx_v_maxiter, PyObject *__pyx_v_maxcall, PyObject *__pyx_v_dlogz, PyObject *__pyx_v_n_effective, PyObject *__pyx_v_add_live, PyObject *__pyx_v_sampler, PyObject *__pyx_v_dynesty_args) {
  PyObject *__pyx_v_prior_names = NULL;
  PyObject *__pyx_v_keys = NULL;
  PyObject *__pyx_v_guess = NULL;
  PyObject *__pyx_v_stds = NULL;
  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
  PyObject *__pyx_v_bounds = NULL;
  PyObject *__pyx_v_flat_guess_range = NULL;
  PyObject *__pyx_v_is_scale_parameter = NULL;
  PyObject *__pyx_v_scaled_guesses = NULL;
  PyObject *__pyx_v_prior = NULL;
  Py_ssize_t __pyx_v_ndim;
  PyObject *__pyx_v_prior_transform_args = NULL;
  PyObject *__pyx_v_loglike_args = NULL;
  PyObject *__pyx_v_pool = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infer_nested_sampling", 0);
  __Pyx_INCREF(__pyx_v_nprocesses);
  __Pyx_INCREF(__pyx_v_queue_size);
  __Pyx_INCREF(__pyx_v_sampler);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("pyross.inference.SIR_type.infer_nested_sampling", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_prior_names);
  __Pyx_XDECREF(__pyx_v_keys);
  __Pyx_XDECREF(__pyx_v_guess);
  __Pyx_XDECREF(__pyx_v_stds);
  __Pyx_XDECREF(__pyx_v__);
  __Pyx_XDECREF(__pyx_v_bounds);
  __Pyx_XDECREF(__pyx_v_flat_guess_range);
  __Pyx_XDECREF(__pyx_v_is_scale_parameter);
  __Pyx_XDECREF(__pyx_v_scaled_guesses);
  __Pyx_XDECREF(__pyx_v_prior);
  __Pyx_XDECREF(__pyx_v_prior_transform_args);
  __Pyx_XDECREF(__pyx_v_loglike_args);
  __Pyx_XDECREF(__pyx_v_pool);
  __Pyx_XDECREF(__pyx_v_nprocesses);
  __Pyx_XDECREF(__pyx_v_queue_size);
  __Pyx_XDECREF(__pyx_v_sampler);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0466:                               verbose=False, nprocesses=0, queue_size=None, maxiter=None, maxcall=None, dlogz=None,
    values[7] = ((PyObject *)Py_False);
    values[8] = ((PyObject *)__pyx_int_0);
    values[9] = ((PyObject *)Py_None);
    values[10] = ((PyObject *)Py_None);
    values[11] = ((PyObject *)Py_None);
    values[12] = ((PyObject *)Py_None);
+0467:                               n_effective=None, add_live=True, sampler=None, **dynesty_args):
    values[13] = ((PyObject *)Py_None);
    values[14] = ((PyObject *)Py_True);
    values[15] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("infer_nested_sampling", 0, 3, 16, 1); __PYX_ERR(0, 465, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prior_dict)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("infer_nested_sampling", 0, 3, 16, 2); __PYX_ERR(0, 465, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_verbose);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nprocesses);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_queue_size);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxiter);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxcall);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dlogz);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_effective);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_add_live);
          if (value) { values[14] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 15:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sampler);
          if (value) { values[15] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_dynesty_args, values, pos_args, "infer_nested_sampling") < 0)) __PYX_ERR(0, 465, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_x = values[0];
    __pyx_v_Tf = values[1];
    __pyx_v_prior_dict = values[2];
    __pyx_v_contactMatrix = values[3];
    __pyx_v_generator = values[4];
    __pyx_v_intervention_fun = values[5];
    __pyx_v_tangent = values[6];
    __pyx_v_verbose = values[7];
    __pyx_v_nprocesses = values[8];
    __pyx_v_queue_size = values[9];
    __pyx_v_maxiter = values[10];
    __pyx_v_maxcall = values[11];
    __pyx_v_dlogz = values[12];
    __pyx_v_n_effective = values[13];
    __pyx_v_add_live = values[14];
    __pyx_v_sampler = values[15];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("infer_nested_sampling", 0, 3, 16, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 465, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_dynesty_args); __pyx_v_dynesty_args = 0;
  __Pyx_AddTraceback("pyross.inference.SIR_type.infer_nested_sampling", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_24infer_nested_sampling(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_x, __pyx_v_Tf, __pyx_v_prior_dict, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_verbose, __pyx_v_nprocesses, __pyx_v_queue_size, __pyx_v_maxiter, __pyx_v_maxcall, __pyx_v_dlogz, __pyx_v_n_effective, __pyx_v_add_live, __pyx_v_sampler, __pyx_v_dynesty_args);
 0468:         """
 0469:         Compute the log-evidence and weighted samples of the a-posteriori distribution of the parameters of a SIR type model
 0470:         using nested sampling as implemented in the `dynesty` Python package. This function assumes that full data on
 0471:         all classes is available.
 0472: 
 0473:         Parameters
 0474:         ----------
 0475:         x: 2d numpy.array
 0476:             Observed trajectory (number of data points x (age groups * model classes))
 0477:         Tf: float
 0478:             Total time of the trajectory
 0479:         prior_dict: dict
 0480:             A dictionary containing priors for parameters (can include both model and intervention parameters). See examples.
 0481:         contactMatrix: callable, optional
 0482:             A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.
 0483:             Either a contactMatrix or a generator must be specified.
 0484:         generator: pyross.contactMatrix, optional
 0485:             A pyross.contactMatrix object that generates a contact matrix function with specified lockdown
 0486:             parameters.
 0487:             Either a contactMatrix or a generator must be specified.
 0488:         intervention_fun: callable, optional
 0489:             The calling signature is `intervention_func(t, **kwargs)`,
 0490:             where t is time and kwargs are other keyword arguments for the function.
 0491:             The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.
 0492:             The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.
 0493:             If not set, assume intervention that's constant in time.
 0494:             See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.
 0495:         tangent: bool, optional
 0496:             Set to True to use tangent space inference. Default is false.
 0497:         verbose: bool, optional
 0498:             Set to True to see intermediate outputs from the nested sampling procedure.
 0499:         nprocesses: int, optional
 0500:             The number of processes used for parallel evaluation of the likelihood.
 0501:         queue_size: int, optional
 0502:             Size of internal queue of likelihood values, default is nprocesses if multiprocessing is used.
 0503:         maxiter: int, optional
 0504:             The maximum number of iterations. Default is no limit.
 0505:         maxcall:int, optional
 0506:             The maximum number of calls to the likelihood function. Default no limit.
 0507:         dlogz: float, optional
 0508:             The iteration terminates if the estimated contribution of the remaining prior volume to the total evidence
 0509:             falls below this threshold. Default value is `1e-3 * (nlive - 1) + 0.01` if `add_live==True`, 0.01 otherwise.
 0510:         n_effective: float, optional
 0511:             The iteration terminates if the number of effective posterior samples reaches this values. Default is no limit.
 0512:         add_live: bool, optional
 0513:             Determines whether to add the remaining set of live points to the set of samples. Default is True.
 0514:         sampler: dynesty.NestedSampler, optional
 0515:             Continue running an instance of a nested sampler until the termination criteria are met.
 0516:         **dynesty_args:
 0517:             Arguments passed through to the construction of the dynesty.NestedSampler constructor. Relevant entries
 0518:             are (this is not comprehensive, for details see the documentation of dynesty):
 0519: 
 0520:             nlive: int, optional
 0521:                 The number of live points. Default is 500.
 0522:             bound: {'none', 'single', 'multi', 'balls', 'cubes'}, optional
 0523:                 Method used to approximately bound the prior using the current set of live points. Default is 'multi'.
 0524:             sample:  {'auto', 'unif', 'rwalk', 'rstagger', 'slice', 'rslice', 'hslice', callable}, optional
 0525:                 Method used to sample uniformly within the likelihood constraint, conditioned on the provided bounds.
 0526: 
 0527:         Returns
 0528:         -------
 0529:         sampler: dynesty.NestedSampler
 0530:             The state of the sampler after termination of the nested sampling run.
 0531:         """
+0532:         if dynesty is None:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_dynesty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 532, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 == Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+0533:             raise Exception("Nested sampling needs optional dependency `dynesty` which was not found.")
    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 533, __pyx_L1_error)
/* … */
  __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_u_Nested_sampling_needs_optional_d); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 533, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__5);
  __Pyx_GIVEREF(__pyx_tuple__5);
 0534: 
+0535:         if nprocesses == 0:
  __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_nprocesses, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 535, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {
/* … */
  }
+0536:             if pathos_mp:
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pathos_mp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 536, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 536, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L5;
    }
 0537:                 # Optional dependecy for multiprocessing (pathos) is installed.
+0538:                 nprocesses = pathos_mp.cpu_count()
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pathos_mp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 538, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_cpu_count); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 538, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF_SET(__pyx_v_nprocesses, __pyx_t_1);
      __pyx_t_1 = 0;
 0539:             else:
+0540:                 nprocesses = 1
    /*else*/ {
      __Pyx_INCREF(__pyx_int_1);
      __Pyx_DECREF_SET(__pyx_v_nprocesses, __pyx_int_1);
    }
    __pyx_L5:;
 0541: 
+0542:         if queue_size is None:
  __pyx_t_3 = (__pyx_v_queue_size == Py_None);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
/* … */
  }
+0543:             queue_size = nprocesses
    __Pyx_INCREF(__pyx_v_nprocesses);
    __Pyx_DECREF_SET(__pyx_v_queue_size, __pyx_v_nprocesses);
 0544: 
 0545:         # Sanity checks of the inputs
+0546:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 546, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 546, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 546, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_v_intervention_fun);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 546, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0547: 
 0548:         # Read in parameter priors
+0549:         prior_names, keys, guess, stds, _, _, bounds, \
  __pyx_v_prior_names = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_keys = __pyx_t_7;
  __pyx_t_7 = 0;
  __pyx_v_guess = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_stds = __pyx_t_8;
  __pyx_t_8 = 0;
  __pyx_v__ = __pyx_t_9;
  __pyx_t_9 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_10);
  __pyx_t_10 = 0;
  __pyx_v_bounds = __pyx_t_11;
  __pyx_t_11 = 0;
  __pyx_v_flat_guess_range = __pyx_t_12;
  __pyx_t_12 = 0;
  __pyx_v_is_scale_parameter = __pyx_t_13;
  __pyx_t_13 = 0;
  __pyx_v_scaled_guesses = __pyx_t_14;
  __pyx_t_14 = 0;
 0550:         flat_guess_range, is_scale_parameter, scaled_guesses  \
+0551:                 = pyross.utils.parse_param_prior_dict(prior_dict, self.M, check_length=(not self.param_mapping_enabled))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyross); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 551, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 551, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_parse_param_prior_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 551, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_self->M); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 551, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 551, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_INCREF(__pyx_v_prior_dict);
  __Pyx_GIVEREF(__pyx_v_prior_dict);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_prior_dict);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 551, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyBool_FromLong((!(__pyx_v_self->param_mapping_enabled != 0))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 551, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_check_length, __pyx_t_4) < 0) __PYX_ERR(0, 551, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 551, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
    PyObject* sequence = __pyx_t_4;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 10)) {
      if (size > 10) __Pyx_RaiseTooManyValuesError(10);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 549, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_10 = PyTuple_GET_ITEM(sequence, 5); 
      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 6); 
      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 7); 
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 8); 
      __pyx_t_14 = PyTuple_GET_ITEM(sequence, 9); 
    } else {
      __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_7 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_10 = PyList_GET_ITEM(sequence, 5); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 6); 
      __pyx_t_12 = PyList_GET_ITEM(sequence, 7); 
      __pyx_t_13 = PyList_GET_ITEM(sequence, 8); 
      __pyx_t_14 = PyList_GET_ITEM(sequence, 9); 
    }
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_t_12);
    __Pyx_INCREF(__pyx_t_13);
    __Pyx_INCREF(__pyx_t_14);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[10] = {&__pyx_t_5,&__pyx_t_7,&__pyx_t_1,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12,&__pyx_t_13,&__pyx_t_14};
      for (i=0; i < 10; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 549, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[10] = {&__pyx_t_5,&__pyx_t_7,&__pyx_t_1,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12,&__pyx_t_13,&__pyx_t_14};
    __pyx_t_15 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 549, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_16 = Py_TYPE(__pyx_t_15)->tp_iternext;
    for (index=0; index < 10; index++) {
      PyObject* item = __pyx_t_16(__pyx_t_15); if (unlikely(!item)) goto __pyx_L7_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_15), 10) < 0) __PYX_ERR(0, 549, __pyx_L1_error)
    __pyx_t_16 = NULL;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    goto __pyx_L8_unpacking_done;
    __pyx_L7_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_16 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 549, __pyx_L1_error)
    __pyx_L8_unpacking_done:;
  }
+0552:         prior = Prior(prior_names, bounds, guess, stds)
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_Prior); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 552, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_13 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_14);
    if (likely(__pyx_t_13)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_14, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_14)) {
    PyObject *__pyx_temp[5] = {__pyx_t_13, __pyx_v_prior_names, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_6, 4+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 552, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_14)) {
    PyObject *__pyx_temp[5] = {__pyx_t_13, __pyx_v_prior_names, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_6, 4+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 552, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  {
    __pyx_t_12 = PyTuple_New(4+__pyx_t_6); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 552, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    if (__pyx_t_13) {
      __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_13); __pyx_t_13 = NULL;
    }
    __Pyx_INCREF(__pyx_v_prior_names);
    __Pyx_GIVEREF(__pyx_v_prior_names);
    PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_6, __pyx_v_prior_names);
    __Pyx_INCREF(__pyx_v_bounds);
    __Pyx_GIVEREF(__pyx_v_bounds);
    PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_6, __pyx_v_bounds);
    __Pyx_INCREF(__pyx_v_guess);
    __Pyx_GIVEREF(__pyx_v_guess);
    PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_6, __pyx_v_guess);
    __Pyx_INCREF(__pyx_v_stds);
    __Pyx_GIVEREF(__pyx_v_stds);
    PyTuple_SET_ITEM(__pyx_t_12, 3+__pyx_t_6, __pyx_v_stds);
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_12, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 552, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  }
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_v_prior = __pyx_t_4;
  __pyx_t_4 = 0;
 0553: 
+0554:         ndim = len(guess)
  __pyx_t_17 = PyObject_Length(__pyx_v_guess); if (unlikely(__pyx_t_17 == ((Py_ssize_t)-1))) __PYX_ERR(0, 554, __pyx_L1_error)
  __pyx_v_ndim = __pyx_t_17;
+0555:         prior_transform_args = {'prior':prior}
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 555, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_prior, __pyx_v_prior) < 0) __PYX_ERR(0, 555, __pyx_L1_error)
  __pyx_v_prior_transform_args = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+0556:         loglike_args = {'keys':keys, 'x':x, 'Tf':Tf, 'flat_guess_range':flat_guess_range,
  __pyx_t_4 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 556, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_keys, __pyx_v_keys) < 0) __PYX_ERR(0, 556, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_x, __pyx_v_x) < 0) __PYX_ERR(0, 556, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_Tf, __pyx_v_Tf) < 0) __PYX_ERR(0, 556, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_flat_guess_range, __pyx_v_flat_guess_range) < 0) __PYX_ERR(0, 556, __pyx_L1_error)
+0557:                          'is_scale_parameter':is_scale_parameter, 'scaled_guesses': scaled_guesses,
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_is_scale_parameter, __pyx_v_is_scale_parameter) < 0) __PYX_ERR(0, 556, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_scaled_guesses, __pyx_v_scaled_guesses) < 0) __PYX_ERR(0, 556, __pyx_L1_error)
+0558:                          'generator':generator, 'intervention_fun': intervention_fun, 'tangent': tangent}
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_generator, __pyx_v_generator) < 0) __PYX_ERR(0, 556, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_intervention_fun, __pyx_v_intervention_fun) < 0) __PYX_ERR(0, 556, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_tangent, __pyx_v_tangent) < 0) __PYX_ERR(0, 556, __pyx_L1_error)
  __pyx_v_loglike_args = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
 0559: 
+0560:         if sampler is None:
  __pyx_t_2 = (__pyx_v_sampler == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L9;
  }
+0561:             if nprocesses > 1:
    __pyx_t_4 = PyObject_RichCompare(__pyx_v_nprocesses, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 561, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 561, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L10;
    }
+0562:                 pool = pathos_mp.ProcessingPool(nprocesses)
      __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_pathos_mp); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 562, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_ProcessingPool); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 562, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_t_14 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
        __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_12);
        if (likely(__pyx_t_14)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
          __Pyx_INCREF(__pyx_t_14);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_12, function);
        }
      }
      __pyx_t_4 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_14, __pyx_v_nprocesses) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_v_nprocesses);
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 562, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_v_pool = __pyx_t_4;
      __pyx_t_4 = 0;
+0563:                 sampler = dynesty.NestedSampler(self._loglikelihood, self._nested_sampling_prior_transform, ndim=ndim,
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_dynesty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 563, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_NestedSampler); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 563, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_loglikelihood); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 563, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_14 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_nested_sampling_prior_transform); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 563, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 563, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_14);
      PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_14);
      __pyx_t_4 = 0;
      __pyx_t_14 = 0;
      __pyx_t_4 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 563, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_11 = PyInt_FromSsize_t(__pyx_v_ndim); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 563, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_ndim, __pyx_t_11) < 0) __PYX_ERR(0, 563, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
/* … */
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 563, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_DECREF_SET(__pyx_v_sampler, __pyx_t_4);
      __pyx_t_4 = 0;
+0564:                                                 logl_kwargs=loglike_args, ptform_kwargs=prior_transform_args,
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_logl_kwargs, __pyx_v_loglike_args) < 0) __PYX_ERR(0, 563, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_ptform_kwargs, __pyx_v_prior_transform_args) < 0) __PYX_ERR(0, 563, __pyx_L1_error)
+0565:                                                 pool=pool, queue_size=queue_size, **dynesty_args)
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_pool, __pyx_v_pool) < 0) __PYX_ERR(0, 563, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_queue_size, __pyx_v_queue_size) < 0) __PYX_ERR(0, 563, __pyx_L1_error)
      __pyx_t_14 = __pyx_t_4;
      __pyx_t_4 = 0;
      if (__Pyx_MergeKeywords(__pyx_t_14, __pyx_v_dynesty_args) < 0) __PYX_ERR(0, 565, __pyx_L1_error)
 0566:             else:
+0567:                 sampler = dynesty.NestedSampler(self._loglikelihood, self._nested_sampling_prior_transform, ndim=ndim,
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_dynesty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 567, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_NestedSampler); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 567, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_loglikelihood); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 567, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_13 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_nested_sampling_prior_transform); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 567, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 567, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_13);
      PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_13);
      __pyx_t_4 = 0;
      __pyx_t_13 = 0;
      __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 567, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_11 = PyInt_FromSsize_t(__pyx_v_ndim); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 567, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_ndim, __pyx_t_11) < 0) __PYX_ERR(0, 567, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
/* … */
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 567, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF_SET(__pyx_v_sampler, __pyx_t_4);
      __pyx_t_4 = 0;
    }
    __pyx_L10:;
+0568:                                                 logl_kwargs=loglike_args, ptform_kwargs=prior_transform_args,
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_logl_kwargs, __pyx_v_loglike_args) < 0) __PYX_ERR(0, 567, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_ptform_kwargs, __pyx_v_prior_transform_args) < 0) __PYX_ERR(0, 567, __pyx_L1_error)
      __pyx_t_13 = __pyx_t_4;
      __pyx_t_4 = 0;
+0569:                                                 **dynesty_args)
      if (__Pyx_MergeKeywords(__pyx_t_13, __pyx_v_dynesty_args) < 0) __PYX_ERR(0, 569, __pyx_L1_error)
 0570:         else:
+0571:             if nprocesses > 1:
  /*else*/ {
    __pyx_t_4 = PyObject_RichCompare(__pyx_v_nprocesses, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 571, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 571, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L11;
    }
 0572:                 # Restart the pool we closed at the end of the previous run.
+0573:                 sampler.pool = pathos_mp.ProcessingPool(nprocesses)
      __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_pathos_mp); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 573, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_ProcessingPool); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 573, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __pyx_t_13 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
        __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12);
        if (likely(__pyx_t_13)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
          __Pyx_INCREF(__pyx_t_13);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_12, function);
        }
      }
      __pyx_t_4 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_13, __pyx_v_nprocesses) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_v_nprocesses);
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 573, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_sampler, __pyx_n_s_pool, __pyx_t_4) < 0) __PYX_ERR(0, 573, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0574:                 sampler.M = sampler.pool.map
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 574, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_map); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 574, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_sampler, __pyx_n_s_M, __pyx_t_12) < 0) __PYX_ERR(0, 574, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+0575:             elif sampler.pool is not None:
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 575, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_3 = (__pyx_t_12 != Py_None);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_2 = (__pyx_t_3 != 0);
    if (__pyx_t_2) {
/* … */
    }
    __pyx_L11:;
  }
  __pyx_L9:;
+0576:                 sampler.pool = None
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_sampler, __pyx_n_s_pool, Py_None) < 0) __PYX_ERR(0, 576, __pyx_L1_error)
+0577:                 sampler.M = map
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_sampler, __pyx_n_s_M, __pyx_builtin_map) < 0) __PYX_ERR(0, 577, __pyx_L1_error)
 0578: 
+0579:         sampler.run_nested(maxiter=maxiter, maxcall=maxcall, dlogz=dlogz, n_effective=n_effective,
  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_run_nested); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_maxiter, __pyx_v_maxiter) < 0) __PYX_ERR(0, 579, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_maxcall, __pyx_v_maxcall) < 0) __PYX_ERR(0, 579, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dlogz, __pyx_v_dlogz) < 0) __PYX_ERR(0, 579, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_n_effective, __pyx_v_n_effective) < 0) __PYX_ERR(0, 579, __pyx_L1_error)
/* … */
  __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+0580:                            add_live=add_live, print_progress=verbose)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_add_live, __pyx_v_add_live) < 0) __PYX_ERR(0, 579, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_print_progress, __pyx_v_verbose) < 0) __PYX_ERR(0, 579, __pyx_L1_error)
 0581: 
+0582:         if sampler.pool is not None:
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 582, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_2 = (__pyx_t_13 != Py_None);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+0583:             sampler.pool.close()
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 583, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_close); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 583, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_12);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_12, function);
      }
    }
    __pyx_t_13 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_12);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 583, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+0584:             sampler.pool.join()
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 584, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_join); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 584, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_13 = (__pyx_t_12) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_12) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 584, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+0585:             sampler.pool.clear()
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 585, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_clear); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 585, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_12);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_12, function);
      }
    }
    __pyx_t_13 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_12);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 585, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 0586: 
+0587:         return sampler
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_sampler);
  __pyx_r = __pyx_v_sampler;
  goto __pyx_L0;
 0588: 
+0589:     def infer_nested_sampling_process_result(self, sampler, prior_dict,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_27infer_nested_sampling_process_result(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_26infer_nested_sampling_process_result[] = "\n        Take the sampler generated by `pyross.inference.infer_nested_sampling` and produce output dictionaries for\n        further use in the pyross framework. See `pyross.inference.infer_nested_sampling` for description of parameters.\n\n        Parameters\n        ----------\n        sampler: dynesty.NestedSampler\n            The output of `pyross.inference.infer_nested_sampling`.\n        prior_dict: dict\n        contactMatrix: callable, optional\n        generator: pyross.contactMatrix, optional\n        intervention_fun: callable, optional\n        **catchall_kwargs: dict\n            Catched further provided arguments and ignores them.\n\n        Returns\n        -------\n        result: dynesty.Result\n            The result of the nested sampling iteration. Relevant entries include:\n\n            result.logz: list\n                The progression of log-evidence estimates, use result.logz[-1] for the final estimate.\n        output_samples: list\n            The processed weighted posterior samples.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_27infer_nested_sampling_process_result(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sampler = 0;
  PyObject *__pyx_v_prior_dict = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  CYTHON_UNUSED PyObject *__pyx_v_catchall_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infer_nested_sampling_process_result (wrapper)", 0);
  __pyx_v_catchall_kwargs = PyDict_New(); if (unlikely(!__pyx_v_catchall_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_catchall_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sampler,&__pyx_n_s_prior_dict,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,0};
    PyObject* values[5] = {0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_XDECREF(__pyx_v_catchall_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_26infer_nested_sampling_process_result(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_sampler, PyObject *__pyx_v_prior_dict, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, CYTHON_UNUSED PyObject *__pyx_v_catchall_kwargs) {
  PyObject *__pyx_v_prior_names = NULL;
  PyObject *__pyx_v_keys = NULL;
  PyObject *__pyx_v_guess = NULL;
  PyObject *__pyx_v_stds = NULL;
  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
  PyObject *__pyx_v_bounds = NULL;
  PyObject *__pyx_v_flat_guess_range = NULL;
  PyObject *__pyx_v_is_scale_parameter = NULL;
  PyObject *__pyx_v_scaled_guesses = NULL;
  PyObject *__pyx_v_prior = NULL;
  PyObject *__pyx_v_result = NULL;
  PyObject *__pyx_v_output_samples = NULL;
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_v_sample = NULL;
  PyObject *__pyx_v_weight = NULL;
  PyObject *__pyx_v_l_like = NULL;
  PyObject *__pyx_v_orig_params = NULL;
  PyObject *__pyx_v_map_params_dict = NULL;
  PyObject *__pyx_v_map_control_params_dict = NULL;
  PyObject *__pyx_v_l_prior = NULL;
  PyObject *__pyx_v_l_post = NULL;
  PyObject *__pyx_v_output_dict = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infer_nested_sampling_process_result", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("pyross.inference.SIR_type.infer_nested_sampling_process_result", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_prior_names);
  __Pyx_XDECREF(__pyx_v_keys);
  __Pyx_XDECREF(__pyx_v_guess);
  __Pyx_XDECREF(__pyx_v_stds);
  __Pyx_XDECREF(__pyx_v__);
  __Pyx_XDECREF(__pyx_v_bounds);
  __Pyx_XDECREF(__pyx_v_flat_guess_range);
  __Pyx_XDECREF(__pyx_v_is_scale_parameter);
  __Pyx_XDECREF(__pyx_v_scaled_guesses);
  __Pyx_XDECREF(__pyx_v_prior);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XDECREF(__pyx_v_output_samples);
  __Pyx_XDECREF(__pyx_v_sample);
  __Pyx_XDECREF(__pyx_v_weight);
  __Pyx_XDECREF(__pyx_v_l_like);
  __Pyx_XDECREF(__pyx_v_orig_params);
  __Pyx_XDECREF(__pyx_v_map_params_dict);
  __Pyx_XDECREF(__pyx_v_map_control_params_dict);
  __Pyx_XDECREF(__pyx_v_l_prior);
  __Pyx_XDECREF(__pyx_v_l_post);
  __Pyx_XDECREF(__pyx_v_output_dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0590:                                              contactMatrix=None, generator=None,
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_None);
+0591:                                              intervention_fun=None, **catchall_kwargs):
    values[4] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sampler)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prior_dict)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("infer_nested_sampling_process_result", 0, 2, 5, 1); __PYX_ERR(0, 589, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_catchall_kwargs, values, pos_args, "infer_nested_sampling_process_result") < 0)) __PYX_ERR(0, 589, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sampler = values[0];
    __pyx_v_prior_dict = values[1];
    __pyx_v_contactMatrix = values[2];
    __pyx_v_generator = values[3];
    __pyx_v_intervention_fun = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("infer_nested_sampling_process_result", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 589, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_catchall_kwargs); __pyx_v_catchall_kwargs = 0;
  __Pyx_AddTraceback("pyross.inference.SIR_type.infer_nested_sampling_process_result", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_26infer_nested_sampling_process_result(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_sampler, __pyx_v_prior_dict, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_catchall_kwargs);
 0592:         """
 0593:         Take the sampler generated by `pyross.inference.infer_nested_sampling` and produce output dictionaries for
 0594:         further use in the pyross framework. See `pyross.inference.infer_nested_sampling` for description of parameters.
 0595: 
 0596:         Parameters
 0597:         ----------
 0598:         sampler: dynesty.NestedSampler
 0599:             The output of `pyross.inference.infer_nested_sampling`.
 0600:         prior_dict: dict
 0601:         contactMatrix: callable, optional
 0602:         generator: pyross.contactMatrix, optional
 0603:         intervention_fun: callable, optional
 0604:         **catchall_kwargs: dict
 0605:             Catched further provided arguments and ignores them.
 0606: 
 0607:         Returns
 0608:         -------
 0609:         result: dynesty.Result
 0610:             The result of the nested sampling iteration. Relevant entries include:
 0611: 
 0612:             result.logz: list
 0613:                 The progression of log-evidence estimates, use result.logz[-1] for the final estimate.
 0614:         output_samples: list
 0615:             The processed weighted posterior samples.
 0616:         """
+0617:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 617, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 617, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 617, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_intervention_fun);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 617, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0618:         prior_names, keys, guess, stds, _, _, bounds, flat_guess_range, is_scale_parameter, scaled_guesses \
  __pyx_v_prior_names = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_keys = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_guess = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_stds = __pyx_t_6;
  __pyx_t_6 = 0;
  __pyx_v__ = __pyx_t_7;
  __pyx_t_7 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_8);
  __pyx_t_8 = 0;
  __pyx_v_bounds = __pyx_t_9;
  __pyx_t_9 = 0;
  __pyx_v_flat_guess_range = __pyx_t_10;
  __pyx_t_10 = 0;
  __pyx_v_is_scale_parameter = __pyx_t_11;
  __pyx_t_11 = 0;
  __pyx_v_scaled_guesses = __pyx_t_12;
  __pyx_t_12 = 0;
+0619:             = pyross.utils.parse_param_prior_dict(prior_dict, self.M, check_length=(not self.param_mapping_enabled))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyross); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_utils); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_parse_param_prior_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->M); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_prior_dict);
  __Pyx_GIVEREF(__pyx_v_prior_dict);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_prior_dict);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyBool_FromLong((!(__pyx_v_self->param_mapping_enabled != 0))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_check_length, __pyx_t_3) < 0) __PYX_ERR(0, 619, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 10)) {
      if (size > 10) __Pyx_RaiseTooManyValuesError(10);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 618, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_7 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 5); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 6); 
      __pyx_t_10 = PyTuple_GET_ITEM(sequence, 7); 
      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 8); 
      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 9); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_7 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 5); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 6); 
      __pyx_t_10 = PyList_GET_ITEM(sequence, 7); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 8); 
      __pyx_t_12 = PyList_GET_ITEM(sequence, 9); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_t_12);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[10] = {&__pyx_t_2,&__pyx_t_5,&__pyx_t_1,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12};
      for (i=0; i < 10; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 618, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[10] = {&__pyx_t_2,&__pyx_t_5,&__pyx_t_1,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12};
    __pyx_t_13 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 618, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_14 = Py_TYPE(__pyx_t_13)->tp_iternext;
    for (index=0; index < 10; index++) {
      PyObject* item = __pyx_t_14(__pyx_t_13); if (unlikely(!item)) goto __pyx_L3_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 10) < 0) __PYX_ERR(0, 618, __pyx_L1_error)
    __pyx_t_14 = NULL;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_14 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 618, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
+0620:         prior = Prior(prior_names, bounds, guess, stds)
  __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_Prior); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 620, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_11 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
    __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12);
    if (likely(__pyx_t_11)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_12, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_12)) {
    PyObject *__pyx_temp[5] = {__pyx_t_11, __pyx_v_prior_names, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 620, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) {
    PyObject *__pyx_temp[5] = {__pyx_t_11, __pyx_v_prior_names, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 620, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  {
    __pyx_t_10 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 620, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__pyx_t_11) {
      __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11); __pyx_t_11 = NULL;
    }
    __Pyx_INCREF(__pyx_v_prior_names);
    __Pyx_GIVEREF(__pyx_v_prior_names);
    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_4, __pyx_v_prior_names);
    __Pyx_INCREF(__pyx_v_bounds);
    __Pyx_GIVEREF(__pyx_v_bounds);
    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_4, __pyx_v_bounds);
    __Pyx_INCREF(__pyx_v_guess);
    __Pyx_GIVEREF(__pyx_v_guess);
    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_4, __pyx_v_guess);
    __Pyx_INCREF(__pyx_v_stds);
    __Pyx_GIVEREF(__pyx_v_stds);
    PyTuple_SET_ITEM(__pyx_t_10, 3+__pyx_t_4, __pyx_v_stds);
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 620, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_v_prior = __pyx_t_3;
  __pyx_t_3 = 0;
 0621: 
+0622:         result = sampler.results
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_results); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 622, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_result = __pyx_t_3;
  __pyx_t_3 = 0;
+0623:         output_samples = []
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_output_samples = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+0624:         for i in range(len(result.samples)):
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s_samples); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_15 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 624, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_16 = __pyx_t_15;
  for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
    __pyx_v_i = __pyx_t_17;
+0625:             sample = result.samples[i]
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s_samples); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 625, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_12 = __Pyx_GetItemInt(__pyx_t_3, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 625, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF_SET(__pyx_v_sample, __pyx_t_12);
    __pyx_t_12 = 0;
+0626:             weight = np.exp(result.logwt[i] - result.logz[len(result.logz)-1])
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 626, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_exp); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 626, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s_logwt); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 626, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_3, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 626, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s_logz); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 626, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s_logz); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 626, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_18 = PyObject_Length(__pyx_t_9); if (unlikely(__pyx_t_18 == ((Py_ssize_t)-1))) __PYX_ERR(0, 626, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_19 = (__pyx_t_18 - 1);
    __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_3, __pyx_t_19, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 626, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyNumber_Subtract(__pyx_t_11, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 626, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_12 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_9, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 626, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF_SET(__pyx_v_weight, __pyx_t_12);
    __pyx_t_12 = 0;
+0627:             l_like = result.logl[i]
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s_logl); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 627, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_10 = __Pyx_GetItemInt(__pyx_t_12, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 627, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_XDECREF_SET(__pyx_v_l_like, __pyx_t_10);
    __pyx_t_10 = 0;
 0628: 
+0629:             orig_params = pyross.utils.unflatten_parameters(sample, flat_guess_range,
    __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_pyross); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 629, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_utils); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 629, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_unflatten_parameters); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 629, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0630:                                                             is_scale_parameter, scaled_guesses)
    __pyx_t_3 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_12);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_12, function);
        __pyx_t_4 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_12)) {
      PyObject *__pyx_temp[5] = {__pyx_t_3, __pyx_v_sample, __pyx_v_flat_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_guesses};
      __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 629, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_10);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) {
      PyObject *__pyx_temp[5] = {__pyx_t_3, __pyx_v_sample, __pyx_v_flat_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_guesses};
      __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 629, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_10);
    } else
    #endif
    {
      __pyx_t_9 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 629, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (__pyx_t_3) {
        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_3); __pyx_t_3 = NULL;
      }
      __Pyx_INCREF(__pyx_v_sample);
      __Pyx_GIVEREF(__pyx_v_sample);
      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_4, __pyx_v_sample);
      __Pyx_INCREF(__pyx_v_flat_guess_range);
      __Pyx_GIVEREF(__pyx_v_flat_guess_range);
      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_4, __pyx_v_flat_guess_range);
      __Pyx_INCREF(__pyx_v_is_scale_parameter);
      __Pyx_GIVEREF(__pyx_v_is_scale_parameter);
      PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_4, __pyx_v_is_scale_parameter);
      __Pyx_INCREF(__pyx_v_scaled_guesses);
      __Pyx_GIVEREF(__pyx_v_scaled_guesses);
      PyTuple_SET_ITEM(__pyx_t_9, 3+__pyx_t_4, __pyx_v_scaled_guesses);
      __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_9, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 629, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_XDECREF_SET(__pyx_v_orig_params, __pyx_t_10);
    __pyx_t_10 = 0;
 0631: 
+0632:             map_params_dict, map_control_params_dict = self.fill_params_dict(keys, orig_params, return_additional_params=True)
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_fill_params_dict); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 632, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 632, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_INCREF(__pyx_v_keys);
    __Pyx_GIVEREF(__pyx_v_keys);
    PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_keys);
    __Pyx_INCREF(__pyx_v_orig_params);
    __Pyx_GIVEREF(__pyx_v_orig_params);
    PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_orig_params);
    __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 632, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_return_additional_params, Py_True) < 0) __PYX_ERR(0, 632, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_12, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 632, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
      PyObject* sequence = __pyx_t_3;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 632, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_12 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_9 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_12 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_12);
      #else
      __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 632, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_12 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 632, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      #endif
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_10 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 632, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_14 = Py_TYPE(__pyx_t_10)->tp_iternext;
      index = 0; __pyx_t_9 = __pyx_t_14(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L7_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_9);
      index = 1; __pyx_t_12 = __pyx_t_14(__pyx_t_10); if (unlikely(!__pyx_t_12)) goto __pyx_L7_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_12);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_10), 2) < 0) __PYX_ERR(0, 632, __pyx_L1_error)
      __pyx_t_14 = NULL;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      goto __pyx_L8_unpacking_done;
      __pyx_L7_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_14 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 632, __pyx_L1_error)
      __pyx_L8_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_map_params_dict, __pyx_t_9);
    __pyx_t_9 = 0;
    __Pyx_XDECREF_SET(__pyx_v_map_control_params_dict, __pyx_t_12);
    __pyx_t_12 = 0;
+0633:             self.set_params(map_params_dict)
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_params); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 633, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_12);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_12, function);
      }
    }
    __pyx_t_3 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_9, __pyx_v_map_params_dict) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_v_map_params_dict);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 633, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 0634: 
+0635:             if generator is not None:
    __pyx_t_20 = (__pyx_v_generator != Py_None);
    __pyx_t_21 = (__pyx_t_20 != 0);
    if (__pyx_t_21) {
/* … */
    }
+0636:                 if intervention_fun is None:
      __pyx_t_21 = (__pyx_v_intervention_fun == Py_None);
      __pyx_t_20 = (__pyx_t_21 != 0);
      if (__pyx_t_20) {
/* … */
        goto __pyx_L10;
      }
+0637:                     self.contactMatrix = generator.constant_contactMatrix(**map_control_params_dict)
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_constant_contactMatrix); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 637, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (unlikely(__pyx_v_map_control_params_dict == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
          __PYX_ERR(0, 637, __pyx_L1_error)
        }
        if (likely(PyDict_CheckExact(__pyx_v_map_control_params_dict))) {
          __pyx_t_12 = PyDict_Copy(__pyx_v_map_control_params_dict); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 637, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
        } else {
          __pyx_t_12 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_map_control_params_dict, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 637, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
        }
        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 637, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_GIVEREF(__pyx_t_9);
        __Pyx_GOTREF(__pyx_v_self->contactMatrix);
        __Pyx_DECREF(__pyx_v_self->contactMatrix);
        __pyx_v_self->contactMatrix = __pyx_t_9;
        __pyx_t_9 = 0;
 0638:                 else:
+0639:                     self.contactMatrix = generator.intervention_custom_temporal(intervention_fun, **map_control_params_dict)
      /*else*/ {
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_intervention_custom_temporal); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 639, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 639, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_INCREF(__pyx_v_intervention_fun);
        __Pyx_GIVEREF(__pyx_v_intervention_fun);
        PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_intervention_fun);
        if (unlikely(__pyx_v_map_control_params_dict == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
          __PYX_ERR(0, 639, __pyx_L1_error)
        }
        if (likely(PyDict_CheckExact(__pyx_v_map_control_params_dict))) {
          __pyx_t_3 = PyDict_Copy(__pyx_v_map_control_params_dict); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 639, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        } else {
          __pyx_t_3 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_map_control_params_dict, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 639, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_12, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 639, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GIVEREF(__pyx_t_10);
        __Pyx_GOTREF(__pyx_v_self->contactMatrix);
        __Pyx_DECREF(__pyx_v_self->contactMatrix);
        __pyx_v_self->contactMatrix = __pyx_t_10;
        __pyx_t_10 = 0;
      }
      __pyx_L10:;
 0640: 
+0641:             l_prior = np.sum(prior.logpdf(sample))
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sum); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_prior, __pyx_n_s_logpdf); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_11 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
      }
    }
    __pyx_t_3 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_11, __pyx_v_sample) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_sample);
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_12);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_12, function);
      }
    }
    __pyx_t_10 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_9, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_XDECREF_SET(__pyx_v_l_prior, __pyx_t_10);
    __pyx_t_10 = 0;
+0642:             l_post = l_like + l_prior
    __pyx_t_10 = PyNumber_Add(__pyx_v_l_like, __pyx_v_l_prior); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 642, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_XDECREF_SET(__pyx_v_l_post, __pyx_t_10);
    __pyx_t_10 = 0;
 0643:             output_dict = {
+0644:                 'params_dict': map_params_dict, 'flat_params': sample, 'param_keys': keys,
    __pyx_t_10 = __Pyx_PyDict_NewPresized(11); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 644, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_params_dict, __pyx_v_map_params_dict) < 0) __PYX_ERR(0, 644, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_flat_params, __pyx_v_sample) < 0) __PYX_ERR(0, 644, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_param_keys, __pyx_v_keys) < 0) __PYX_ERR(0, 644, __pyx_L1_error)
+0645:                 'log_posterior':l_post, 'log_prior':l_prior, 'log_likelihood':l_like,
    if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_log_posterior, __pyx_v_l_post) < 0) __PYX_ERR(0, 644, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_log_prior, __pyx_v_l_prior) < 0) __PYX_ERR(0, 644, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_log_likelihood, __pyx_v_l_like) < 0) __PYX_ERR(0, 644, __pyx_L1_error)
+0646:                 'weight':weight, 'is_scale_parameter':is_scale_parameter,
    if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_weight, __pyx_v_weight) < 0) __PYX_ERR(0, 644, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_is_scale_parameter, __pyx_v_is_scale_parameter) < 0) __PYX_ERR(0, 644, __pyx_L1_error)
+0647:                 'param_guess_range':flat_guess_range,
    if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_param_guess_range, __pyx_v_flat_guess_range) < 0) __PYX_ERR(0, 644, __pyx_L1_error)
+0648:                 'scaled_param_guesses':scaled_guesses,
    if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_scaled_param_guesses, __pyx_v_scaled_guesses) < 0) __PYX_ERR(0, 644, __pyx_L1_error)
+0649:                 'prior': prior
    if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_prior, __pyx_v_prior) < 0) __PYX_ERR(0, 644, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_output_dict, ((PyObject*)__pyx_t_10));
    __pyx_t_10 = 0;
 0650:             }
+0651:             if map_control_params_dict != {}:
    __pyx_t_10 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_12 = PyObject_RichCompare(__pyx_v_map_control_params_dict, __pyx_t_10, Py_NE); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 651, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_20 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely(__pyx_t_20 < 0)) __PYX_ERR(0, 651, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (__pyx_t_20) {
/* … */
    }
+0652:                 output_dict['control_params_dict'] = map_control_params_dict
      if (unlikely(PyDict_SetItem(__pyx_v_output_dict, __pyx_n_u_control_params_dict, __pyx_v_map_control_params_dict) < 0)) __PYX_ERR(0, 652, __pyx_L1_error)
 0653: 
+0654:             output_samples.append(output_dict)
    __pyx_t_22 = __Pyx_PyList_Append(__pyx_v_output_samples, __pyx_v_output_dict); if (unlikely(__pyx_t_22 == ((int)-1))) __PYX_ERR(0, 654, __pyx_L1_error)
  }
 0655: 
+0656:         return result, output_samples
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 656, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_INCREF(__pyx_v_result);
  __Pyx_GIVEREF(__pyx_v_result);
  PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_result);
  __Pyx_INCREF(__pyx_v_output_samples);
  __Pyx_GIVEREF(__pyx_v_output_samples);
  PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_output_samples);
  __pyx_r = __pyx_t_12;
  __pyx_t_12 = 0;
  goto __pyx_L0;
 0657: 
+0658:     def infer_mcmc(self, x, Tf, prior_dict, contactMatrix=None, generator=None, intervention_fun=None, tangent=False,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_29infer_mcmc(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_28infer_mcmc[] = "\n        Sample the posterior distribution of the epidemiological parameters using ensemble MCMC.\n\n        Parameters\n        ----------\n        x: 2d numpy.array\n            Observed trajectory (number of data points x (age groups * model classes))\n        Tf: float\n            Total time of the trajectory\n        prior_dict: dict\n            A dictionary containing priors for parameters (can include both model and intervention parameters). See examples.\n        contactMatrix: callable, optional\n            A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.\n            Either a contactMatrix or a generator must be specified.\n        generator: pyross.contactMatrix, optional\n            A pyross.contactMatrix object that generates a contact matrix function with specified lockdown\n            parameters.\n            Either a contactMatrix or a generator must be specified.\n        intervention_fun: callable, optional\n            The calling signature is `intervention_func(t, **kwargs)`,\n            where t is time and kwargs are other keyword arguments for the function.\n            The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.\n            The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.\n            If not set, assume intervention that's constant in time.\n            See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.\n        tangent: bool, optional\n            Set to True to use tangent space inference. Default is False.\n        verbose: bool, optional\n            Set to True to see a progress bar for the sample generation. Default is False.\n        sampler: emcee.EnsembleSampler, optional\n            Set to instance of the sampler (as returned by this function) to continue running the MCMC chains.\n            Default is None (i.e. run a new chain).\n        nwalkers:int, optional\n    ""        The number of chains in the ensemble (should be at least 2*dim). Default is 2*dim.\n        walker_pos: np.array, optional\n            The initial position of the walkers. If not specified, it samples random positions from the prior.\n        nsamples:int, optional\n            The number of samples per walker. Default is 1000.\n        nprocesses: int, optional\n            The number of processes used to compute the likelihood for the walkers, needs `pathos`. Default is\n            the number of cpu cores if `pathos` is available, otherwise 1.\n\n        Returns\n        -------\n        sampler: emcee.EnsembleSampler\n            This function returns the interal state of the sampler. To look at the chain of the internal flattened parameters,\n            run `sampler.get_chain()`. Use this to judge whether the chain has sufficiently converged. Either rerun\n            `mcmc_inference(..., sampler=sampler)` to continue the chain or `mcmc_inference_process_result(...)` to process\n            the result.\n\n        Examples\n        --------\n        For the structure of `prior_dict`, see the documentation of `infer`. To start sampling the posterior,\n        run for example\n\n        >>> sampler = estimator.infer_mcmc(x, Tf, prior_dict, contactMatrix=contactMatrix, verbose=True)\n\n        To judge the convergence of this chain, we can look at the trace plot of all the chains (for a moderate number of\n        dimensions `dim`)\n\n        >>> fig, axes = plt.subplots(dim, sharex=True)\n        >>> samples = sampler.get_chain()\n        >>> for i in range(dim):\n                ax = axes[i]\n                ax.plot(samples[:, :, i], \"k\", alpha=0.3)\n                ax.set_xlim(0, len(samples))\n        >>> axes[-1].set_xlabel(\"step number\");\n\n        For more detailed convergence metrics, see the documentation of `emcee`. To continue running this chain, we can\n        call this function again with the sampler as argument\n\n        >>> sampler ="" estimator.infer_mcmc(x, Tf, prior_dict, contactMatrix=contactMatrix, verbose=True, sampler=sampler)\n\n        This procudes 1000 additional samples in each chain. To process the results, call `infer_mcmc_process_result`.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_29infer_mcmc(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_prior_dict = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_verbose = 0;
  PyObject *__pyx_v_sampler = 0;
  PyObject *__pyx_v_nwalkers = 0;
  PyObject *__pyx_v_walker_pos = 0;
  PyObject *__pyx_v_nsamples = 0;
  PyObject *__pyx_v_nprocesses = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infer_mcmc (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_Tf,&__pyx_n_s_prior_dict,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_tangent,&__pyx_n_s_verbose,&__pyx_n_s_sampler,&__pyx_n_s_nwalkers,&__pyx_n_s_walker_pos,&__pyx_n_s_nsamples,&__pyx_n_s_nprocesses,0};
    PyObject* values[13] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[3] = ((PyObject *)Py_None);
    values[4] = ((PyObject *)Py_None);
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_False);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_28infer_mcmc(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_Tf, PyObject *__pyx_v_prior_dict, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_tangent, PyObject *__pyx_v_verbose, PyObject *__pyx_v_sampler, PyObject *__pyx_v_nwalkers, PyObject *__pyx_v_walker_pos, PyObject *__pyx_v_nsamples, PyObject *__pyx_v_nprocesses) {
  PyObject *__pyx_v_prior_names = NULL;
  PyObject *__pyx_v_keys = NULL;
  PyObject *__pyx_v_guess = NULL;
  PyObject *__pyx_v_stds = NULL;
  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
  PyObject *__pyx_v_bounds = NULL;
  PyObject *__pyx_v_flat_guess_range = NULL;
  PyObject *__pyx_v_is_scale_parameter = NULL;
  PyObject *__pyx_v_scaled_guesses = NULL;
  PyObject *__pyx_v_prior = NULL;
  PyObject *__pyx_v_ndim = NULL;
  PyObject *__pyx_v_logpost_args = NULL;
  PyObject *__pyx_v_points = NULL;
  PyObject *__pyx_v_p0 = NULL;
  PyObject *__pyx_v_mcmc_pool = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infer_mcmc", 0);
  __Pyx_INCREF(__pyx_v_sampler);
  __Pyx_INCREF(__pyx_v_nwalkers);
  __Pyx_INCREF(__pyx_v_nprocesses);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("pyross.inference.SIR_type.infer_mcmc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_prior_names);
  __Pyx_XDECREF(__pyx_v_keys);
  __Pyx_XDECREF(__pyx_v_guess);
  __Pyx_XDECREF(__pyx_v_stds);
  __Pyx_XDECREF(__pyx_v__);
  __Pyx_XDECREF(__pyx_v_bounds);
  __Pyx_XDECREF(__pyx_v_flat_guess_range);
  __Pyx_XDECREF(__pyx_v_is_scale_parameter);
  __Pyx_XDECREF(__pyx_v_scaled_guesses);
  __Pyx_XDECREF(__pyx_v_prior);
  __Pyx_XDECREF(__pyx_v_ndim);
  __Pyx_XDECREF(__pyx_v_logpost_args);
  __Pyx_XDECREF(__pyx_v_points);
  __Pyx_XDECREF(__pyx_v_p0);
  __Pyx_XDECREF(__pyx_v_mcmc_pool);
  __Pyx_XDECREF(__pyx_v_sampler);
  __Pyx_XDECREF(__pyx_v_nwalkers);
  __Pyx_XDECREF(__pyx_v_nprocesses);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0659:                    verbose=False, sampler=None, nwalkers=None, walker_pos=None, nsamples=1000, nprocesses=0):
    values[7] = ((PyObject *)Py_False);
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject *)Py_None);
    values[10] = ((PyObject *)Py_None);
    values[11] = ((PyObject *)__pyx_int_1000);
    values[12] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("infer_mcmc", 0, 3, 13, 1); __PYX_ERR(0, 658, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prior_dict)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("infer_mcmc", 0, 3, 13, 2); __PYX_ERR(0, 658, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_verbose);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sampler);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nwalkers);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_walker_pos);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nsamples);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nprocesses);
          if (value) { values[12] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "infer_mcmc") < 0)) __PYX_ERR(0, 658, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_x = values[0];
    __pyx_v_Tf = values[1];
    __pyx_v_prior_dict = values[2];
    __pyx_v_contactMatrix = values[3];
    __pyx_v_generator = values[4];
    __pyx_v_intervention_fun = values[5];
    __pyx_v_tangent = values[6];
    __pyx_v_verbose = values[7];
    __pyx_v_sampler = values[8];
    __pyx_v_nwalkers = values[9];
    __pyx_v_walker_pos = values[10];
    __pyx_v_nsamples = values[11];
    __pyx_v_nprocesses = values[12];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("infer_mcmc", 0, 3, 13, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 658, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.infer_mcmc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_28infer_mcmc(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_x, __pyx_v_Tf, __pyx_v_prior_dict, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_verbose, __pyx_v_sampler, __pyx_v_nwalkers, __pyx_v_walker_pos, __pyx_v_nsamples, __pyx_v_nprocesses);
 0660:         """
 0661:         Sample the posterior distribution of the epidemiological parameters using ensemble MCMC.
 0662: 
 0663:         Parameters
 0664:         ----------
 0665:         x: 2d numpy.array
 0666:             Observed trajectory (number of data points x (age groups * model classes))
 0667:         Tf: float
 0668:             Total time of the trajectory
 0669:         prior_dict: dict
 0670:             A dictionary containing priors for parameters (can include both model and intervention parameters). See examples.
 0671:         contactMatrix: callable, optional
 0672:             A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.
 0673:             Either a contactMatrix or a generator must be specified.
 0674:         generator: pyross.contactMatrix, optional
 0675:             A pyross.contactMatrix object that generates a contact matrix function with specified lockdown
 0676:             parameters.
 0677:             Either a contactMatrix or a generator must be specified.
 0678:         intervention_fun: callable, optional
 0679:             The calling signature is `intervention_func(t, **kwargs)`,
 0680:             where t is time and kwargs are other keyword arguments for the function.
 0681:             The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.
 0682:             The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.
 0683:             If not set, assume intervention that's constant in time.
 0684:             See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.
 0685:         tangent: bool, optional
 0686:             Set to True to use tangent space inference. Default is False.
 0687:         verbose: bool, optional
 0688:             Set to True to see a progress bar for the sample generation. Default is False.
 0689:         sampler: emcee.EnsembleSampler, optional
 0690:             Set to instance of the sampler (as returned by this function) to continue running the MCMC chains.
 0691:             Default is None (i.e. run a new chain).
 0692:         nwalkers:int, optional
 0693:             The number of chains in the ensemble (should be at least 2*dim). Default is 2*dim.
 0694:         walker_pos: np.array, optional
 0695:             The initial position of the walkers. If not specified, it samples random positions from the prior.
 0696:         nsamples:int, optional
 0697:             The number of samples per walker. Default is 1000.
 0698:         nprocesses: int, optional
 0699:             The number of processes used to compute the likelihood for the walkers, needs `pathos`. Default is
 0700:             the number of cpu cores if `pathos` is available, otherwise 1.
 0701: 
 0702:         Returns
 0703:         -------
 0704:         sampler: emcee.EnsembleSampler
 0705:             This function returns the interal state of the sampler. To look at the chain of the internal flattened parameters,
 0706:             run `sampler.get_chain()`. Use this to judge whether the chain has sufficiently converged. Either rerun
 0707:             `mcmc_inference(..., sampler=sampler)` to continue the chain or `mcmc_inference_process_result(...)` to process
 0708:             the result.
 0709: 
 0710:         Examples
 0711:         --------
 0712:         For the structure of `prior_dict`, see the documentation of `infer`. To start sampling the posterior,
 0713:         run for example
 0714: 
 0715:         >>> sampler = estimator.infer_mcmc(x, Tf, prior_dict, contactMatrix=contactMatrix, verbose=True)
 0716: 
 0717:         To judge the convergence of this chain, we can look at the trace plot of all the chains (for a moderate number of
 0718:         dimensions `dim`)
 0719: 
 0720:         >>> fig, axes = plt.subplots(dim, sharex=True)
 0721:         >>> samples = sampler.get_chain()
 0722:         >>> for i in range(dim):
 0723:                 ax = axes[i]
 0724:                 ax.plot(samples[:, :, i], "k", alpha=0.3)
 0725:                 ax.set_xlim(0, len(samples))
 0726:         >>> axes[-1].set_xlabel("step number");
 0727: 
 0728:         For more detailed convergence metrics, see the documentation of `emcee`. To continue running this chain, we can
 0729:         call this function again with the sampler as argument
 0730: 
 0731:         >>> sampler = estimator.infer_mcmc(x, Tf, prior_dict, contactMatrix=contactMatrix, verbose=True, sampler=sampler)
 0732: 
 0733:         This procudes 1000 additional samples in each chain. To process the results, call `infer_mcmc_process_result`.
 0734:         """
+0735:         if emcee is None:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_emcee); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 735, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 == Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+0736:             raise Exception("MCMC sampling needs optional dependency `emcee` which was not found.")
    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 736, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 736, __pyx_L1_error)
/* … */
  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_u_MCMC_sampling_needs_optional_dep); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 736, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__6);
  __Pyx_GIVEREF(__pyx_tuple__6);
 0737: 
+0738:         if nprocesses == 0:
  __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_nprocesses, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 738, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 738, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {
/* … */
  }
+0739:             if pathos_mp:
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pathos_mp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 739, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 739, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L5;
    }
 0740:                 # Optional dependecy for multiprocessing (pathos) is installed.
+0741:                 nprocesses = pathos_mp.cpu_count()
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pathos_mp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 741, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_cpu_count); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 741, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 741, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF_SET(__pyx_v_nprocesses, __pyx_t_1);
      __pyx_t_1 = 0;
 0742:             else:
+0743:                 nprocesses = 1
    /*else*/ {
      __Pyx_INCREF(__pyx_int_1);
      __Pyx_DECREF_SET(__pyx_v_nprocesses, __pyx_int_1);
    }
    __pyx_L5:;
 0744: 
+0745:         if nprocesses > 1 and pathos_mp is None:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_nprocesses, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 745, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 745, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L7_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pathos_mp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 745, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 == Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = (__pyx_t_2 != 0);
  __pyx_t_3 = __pyx_t_6;
  __pyx_L7_bool_binop_done:;
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+0746:             raise Exception("The Python package `pathos` is needed for multiprocessing.")
    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 746, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 746, __pyx_L1_error)
/* … */
  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_u_The_Python_package_pathos_is_nee); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 746, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__7);
  __Pyx_GIVEREF(__pyx_tuple__7);
 0747: 
 0748:         # Sanity checks of the inputs
+0749:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 749, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 749, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 749, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_v_intervention_fun);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 749, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0750: 
 0751:         # Read in parameter priors
+0752:         prior_names, keys, guess, stds, _, _, bounds, \
  __pyx_v_prior_names = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_keys = __pyx_t_8;
  __pyx_t_8 = 0;
  __pyx_v_guess = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_stds = __pyx_t_9;
  __pyx_t_9 = 0;
  __pyx_v__ = __pyx_t_10;
  __pyx_t_10 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_11);
  __pyx_t_11 = 0;
  __pyx_v_bounds = __pyx_t_12;
  __pyx_t_12 = 0;
  __pyx_v_flat_guess_range = __pyx_t_13;
  __pyx_t_13 = 0;
  __pyx_v_is_scale_parameter = __pyx_t_14;
  __pyx_t_14 = 0;
  __pyx_v_scaled_guesses = __pyx_t_15;
  __pyx_t_15 = 0;
 0753:         flat_guess_range, is_scale_parameter, scaled_guesses  \
+0754:                 = pyross.utils.parse_param_prior_dict(prior_dict, self.M, check_length=(not self.param_mapping_enabled))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyross); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 754, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 754, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_parse_param_prior_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 754, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_self->M); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 754, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 754, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_INCREF(__pyx_v_prior_dict);
  __Pyx_GIVEREF(__pyx_v_prior_dict);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_prior_dict);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 754, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyBool_FromLong((!(__pyx_v_self->param_mapping_enabled != 0))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 754, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_check_length, __pyx_t_4) < 0) __PYX_ERR(0, 754, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 754, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
    PyObject* sequence = __pyx_t_4;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 10)) {
      if (size > 10) __Pyx_RaiseTooManyValuesError(10);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 752, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_10 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 5); 
      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 6); 
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 7); 
      __pyx_t_14 = PyTuple_GET_ITEM(sequence, 8); 
      __pyx_t_15 = PyTuple_GET_ITEM(sequence, 9); 
    } else {
      __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_10 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 5); 
      __pyx_t_12 = PyList_GET_ITEM(sequence, 6); 
      __pyx_t_13 = PyList_GET_ITEM(sequence, 7); 
      __pyx_t_14 = PyList_GET_ITEM(sequence, 8); 
      __pyx_t_15 = PyList_GET_ITEM(sequence, 9); 
    }
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_t_12);
    __Pyx_INCREF(__pyx_t_13);
    __Pyx_INCREF(__pyx_t_14);
    __Pyx_INCREF(__pyx_t_15);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[10] = {&__pyx_t_5,&__pyx_t_8,&__pyx_t_1,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12,&__pyx_t_13,&__pyx_t_14,&__pyx_t_15};
      for (i=0; i < 10; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 752, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[10] = {&__pyx_t_5,&__pyx_t_8,&__pyx_t_1,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12,&__pyx_t_13,&__pyx_t_14,&__pyx_t_15};
    __pyx_t_16 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 752, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_17 = Py_TYPE(__pyx_t_16)->tp_iternext;
    for (index=0; index < 10; index++) {
      PyObject* item = __pyx_t_17(__pyx_t_16); if (unlikely(!item)) goto __pyx_L9_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_17(__pyx_t_16), 10) < 0) __PYX_ERR(0, 752, __pyx_L1_error)
    __pyx_t_17 = NULL;
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    goto __pyx_L10_unpacking_done;
    __pyx_L9_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    __pyx_t_17 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 752, __pyx_L1_error)
    __pyx_L10_unpacking_done:;
  }
+0755:         prior = Prior(prior_names, bounds, guess, stds)
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_Prior); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 755, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_14 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_15);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_15, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_15)) {
    PyObject *__pyx_temp[5] = {__pyx_t_14, __pyx_v_prior_names, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_7, 4+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 755, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) {
    PyObject *__pyx_temp[5] = {__pyx_t_14, __pyx_v_prior_names, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_7, 4+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 755, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  {
    __pyx_t_13 = PyTuple_New(4+__pyx_t_7); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 755, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    if (__pyx_t_14) {
      __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_14); __pyx_t_14 = NULL;
    }
    __Pyx_INCREF(__pyx_v_prior_names);
    __Pyx_GIVEREF(__pyx_v_prior_names);
    PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_7, __pyx_v_prior_names);
    __Pyx_INCREF(__pyx_v_bounds);
    __Pyx_GIVEREF(__pyx_v_bounds);
    PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_7, __pyx_v_bounds);
    __Pyx_INCREF(__pyx_v_guess);
    __Pyx_GIVEREF(__pyx_v_guess);
    PyTuple_SET_ITEM(__pyx_t_13, 2+__pyx_t_7, __pyx_v_guess);
    __Pyx_INCREF(__pyx_v_stds);
    __Pyx_GIVEREF(__pyx_v_stds);
    PyTuple_SET_ITEM(__pyx_t_13, 3+__pyx_t_7, __pyx_v_stds);
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_13, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 755, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  }
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_v_prior = __pyx_t_4;
  __pyx_t_4 = 0;
 0756: 
+0757:         ndim = len(guess)
  __pyx_t_18 = PyObject_Length(__pyx_v_guess); if (unlikely(__pyx_t_18 == ((Py_ssize_t)-1))) __PYX_ERR(0, 757, __pyx_L1_error)
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_18); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 757, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_ndim = __pyx_t_4;
  __pyx_t_4 = 0;
+0758:         if nwalkers is None:
  __pyx_t_3 = (__pyx_v_nwalkers == Py_None);
  __pyx_t_6 = (__pyx_t_3 != 0);
  if (__pyx_t_6) {
/* … */
  }
+0759:             nwalkers = 2*ndim
    __pyx_t_4 = PyNumber_Multiply(__pyx_int_2, __pyx_v_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF_SET(__pyx_v_nwalkers, __pyx_t_4);
    __pyx_t_4 = 0;
 0760: 
+0761:         logpost_args = {'bounds':bounds, 'keys':keys, 'is_scale_parameter':is_scale_parameter,
  __pyx_t_4 = __Pyx_PyDict_NewPresized(11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 761, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_bounds, __pyx_v_bounds) < 0) __PYX_ERR(0, 761, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_keys, __pyx_v_keys) < 0) __PYX_ERR(0, 761, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_is_scale_parameter, __pyx_v_is_scale_parameter) < 0) __PYX_ERR(0, 761, __pyx_L1_error)
+0762:                 'scaled_guesses':scaled_guesses, 'flat_guess_range':flat_guess_range,
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_scaled_guesses, __pyx_v_scaled_guesses) < 0) __PYX_ERR(0, 761, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_flat_guess_range, __pyx_v_flat_guess_range) < 0) __PYX_ERR(0, 761, __pyx_L1_error)
+0763:                 'x':x, 'Tf':Tf, 'prior':prior, 'tangent':tangent, 'generator':generator,
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_x, __pyx_v_x) < 0) __PYX_ERR(0, 761, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_Tf, __pyx_v_Tf) < 0) __PYX_ERR(0, 761, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_prior, __pyx_v_prior) < 0) __PYX_ERR(0, 761, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_tangent, __pyx_v_tangent) < 0) __PYX_ERR(0, 761, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_generator, __pyx_v_generator) < 0) __PYX_ERR(0, 761, __pyx_L1_error)
+0764:                 'intervention_fun': intervention_fun}
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_intervention_fun, __pyx_v_intervention_fun) < 0) __PYX_ERR(0, 761, __pyx_L1_error)
  __pyx_v_logpost_args = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+0765:         if walker_pos is None:
  __pyx_t_6 = (__pyx_v_walker_pos == Py_None);
  __pyx_t_3 = (__pyx_t_6 != 0);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L12;
  }
 0766:              # If not specified, sample initial positions of walkers from prior (within bounds).
+0767:             points = np.random.rand(nwalkers, ndim)
    __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_random); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_rand); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_15))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_15);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_15, function);
        __pyx_t_7 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_15)) {
      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_nwalkers, __pyx_v_ndim};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 767, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_GOTREF(__pyx_t_4);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) {
      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_nwalkers, __pyx_v_ndim};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 767, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_GOTREF(__pyx_t_4);
    } else
    #endif
    {
      __pyx_t_14 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 767, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      if (__pyx_t_13) {
        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_13); __pyx_t_13 = NULL;
      }
      __Pyx_INCREF(__pyx_v_nwalkers);
      __Pyx_GIVEREF(__pyx_v_nwalkers);
      PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_7, __pyx_v_nwalkers);
      __Pyx_INCREF(__pyx_v_ndim);
      __Pyx_GIVEREF(__pyx_v_ndim);
      PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_7, __pyx_v_ndim);
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_14, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 767, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    }
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_v_points = __pyx_t_4;
    __pyx_t_4 = 0;
+0768:             p0 = prior.ppf(points)
    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_prior, __pyx_n_s_ppf); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_14 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_15))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_15);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_15, function);
      }
    }
    __pyx_t_4 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_15, __pyx_t_14, __pyx_v_points) : __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_v_points);
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_v_p0 = __pyx_t_4;
    __pyx_t_4 = 0;
 0769:         else:
+0770:             p0 = walker_pos
  /*else*/ {
    __Pyx_INCREF(__pyx_v_walker_pos);
    __pyx_v_p0 = __pyx_v_walker_pos;
  }
  __pyx_L12:;
 0771: 
+0772:         if sampler is None:
  __pyx_t_3 = (__pyx_v_sampler == Py_None);
  __pyx_t_6 = (__pyx_t_3 != 0);
  if (__pyx_t_6) {
/* … */
    goto __pyx_L13;
  }
 0773:             # Start a new MCMC chain.
+0774:             if nprocesses > 1:
    __pyx_t_4 = PyObject_RichCompare(__pyx_v_nprocesses, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 774, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 774, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_6) {
/* … */
      goto __pyx_L14;
    }
+0775:                 mcmc_pool = pathos_mp.ProcessingPool(nprocesses)
      __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_pathos_mp); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 775, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_ProcessingPool); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 775, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __pyx_t_15 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
        __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_14);
        if (likely(__pyx_t_15)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
          __Pyx_INCREF(__pyx_t_15);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_14, function);
        }
      }
      __pyx_t_4 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_15, __pyx_v_nprocesses) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_v_nprocesses);
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 775, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_v_mcmc_pool = __pyx_t_4;
      __pyx_t_4 = 0;
+0776:                 sampler = emcee.EnsembleSampler(nwalkers, ndim, self._logposterior, kwargs=logpost_args,
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_emcee); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 776, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_EnsembleSampler); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 776, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_logposterior); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 776, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_15 = PyTuple_New(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 776, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_INCREF(__pyx_v_nwalkers);
      __Pyx_GIVEREF(__pyx_v_nwalkers);
      PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_v_nwalkers);
      __Pyx_INCREF(__pyx_v_ndim);
      __Pyx_GIVEREF(__pyx_v_ndim);
      PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_ndim);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_t_4);
      __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 776, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_kwargs, __pyx_v_logpost_args) < 0) __PYX_ERR(0, 776, __pyx_L1_error)
/* … */
      __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_15, __pyx_t_4); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 776, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF_SET(__pyx_v_sampler, __pyx_t_13);
      __pyx_t_13 = 0;
+0777:                                                 pool=mcmc_pool)
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_pool, __pyx_v_mcmc_pool) < 0) __PYX_ERR(0, 776, __pyx_L1_error)
 0778:             else:
+0779:                 sampler = emcee.EnsembleSampler(nwalkers, ndim, self._logposterior, kwargs=logpost_args)
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_emcee); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_EnsembleSampler); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __pyx_t_13 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_logposterior); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_15 = PyTuple_New(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_INCREF(__pyx_v_nwalkers);
      __Pyx_GIVEREF(__pyx_v_nwalkers);
      PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_v_nwalkers);
      __Pyx_INCREF(__pyx_v_ndim);
      __Pyx_GIVEREF(__pyx_v_ndim);
      PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_ndim);
      __Pyx_GIVEREF(__pyx_t_13);
      PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_t_13);
      __pyx_t_13 = 0;
      __pyx_t_13 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_kwargs, __pyx_v_logpost_args) < 0) __PYX_ERR(0, 779, __pyx_L1_error)
      __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_15, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF_SET(__pyx_v_sampler, __pyx_t_14);
      __pyx_t_14 = 0;
    }
    __pyx_L14:;
 0780: 
+0781:             sampler.run_mcmc(p0, nsamples, progress=verbose)
    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_run_mcmc); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 781, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 781, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_INCREF(__pyx_v_p0);
    __Pyx_GIVEREF(__pyx_v_p0);
    PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_v_p0);
    __Pyx_INCREF(__pyx_v_nsamples);
    __Pyx_GIVEREF(__pyx_v_nsamples);
    PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_v_nsamples);
    __pyx_t_15 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 781, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_progress, __pyx_v_verbose) < 0) __PYX_ERR(0, 781, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_13, __pyx_t_15); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 781, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 0782:         else:
 0783:             # Continue running an existing MCMC chain.
+0784:             if nprocesses > 1:
  /*else*/ {
    __pyx_t_4 = PyObject_RichCompare(__pyx_v_nprocesses, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 784, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 784, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_6) {
/* … */
      goto __pyx_L15;
    }
+0785:                 sampler.pool = pathos_mp.ProcessingPool(nprocesses)
      __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_pathos_mp); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 785, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_ProcessingPool); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 785, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __pyx_t_15 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
        __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_13);
        if (likely(__pyx_t_15)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
          __Pyx_INCREF(__pyx_t_15);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_13, function);
        }
      }
      __pyx_t_4 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_15, __pyx_v_nprocesses) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_v_nprocesses);
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 785, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_sampler, __pyx_n_s_pool, __pyx_t_4) < 0) __PYX_ERR(0, 785, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0786:             elif sampler.pool is not None:
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 786, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = (__pyx_t_4 != Py_None);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_3 = (__pyx_t_6 != 0);
    if (__pyx_t_3) {
/* … */
    }
    __pyx_L15:;
+0787:                 sampler.pool = None
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_sampler, __pyx_n_s_pool, Py_None) < 0) __PYX_ERR(0, 787, __pyx_L1_error)
 0788: 
+0789:             sampler.run_mcmc(None, nsamples, progress=verbose)
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_run_mcmc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 789, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 789, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    PyTuple_SET_ITEM(__pyx_t_13, 0, Py_None);
    __Pyx_INCREF(__pyx_v_nsamples);
    __Pyx_GIVEREF(__pyx_v_nsamples);
    PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_v_nsamples);
    __pyx_t_15 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 789, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_progress, __pyx_v_verbose) < 0) __PYX_ERR(0, 789, __pyx_L1_error)
    __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_13, __pyx_t_15); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 789, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  }
  __pyx_L13:;
 0790: 
+0791:         if sampler.pool is not None:
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 791, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_3 = (__pyx_t_14 != Py_None);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_6 = (__pyx_t_3 != 0);
  if (__pyx_t_6) {
/* … */
  }
+0792:             sampler.pool.close()
    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 792, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_close); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 792, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_15 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_15)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_15);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_14 = (__pyx_t_15) ? __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_15) : __Pyx_PyObject_CallNoArg(__pyx_t_13);
    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
    if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 792, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+0793:             sampler.pool.join()
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 793, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_join); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 793, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_15))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_15);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_15, function);
      }
    }
    __pyx_t_14 = (__pyx_t_13) ? __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_t_13) : __Pyx_PyObject_CallNoArg(__pyx_t_15);
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 793, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+0794:             sampler.pool.clear()
    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 794, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_clear); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 794, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_15 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_15)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_15);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_14 = (__pyx_t_15) ? __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_15) : __Pyx_PyObject_CallNoArg(__pyx_t_13);
    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
    if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 794, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 0795: 
+0796:         return sampler
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_sampler);
  __pyx_r = __pyx_v_sampler;
  goto __pyx_L0;
 0797: 
+0798:     def infer_mcmc_process_result(self, sampler, prior_dict, contactMatrix=None, generator=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_31infer_mcmc_process_result(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_30infer_mcmc_process_result[] = "\n        Take the sampler generated by `pyross.inference.infer_mcmc` and produce output dictionaries for further use in the\n        pyross framework. See `pyross.inference.infer_mcmc` for additional description of parameters.\n\n        Parameters\n        ----------\n        sampler: emcee.EnsembleSampler\n            Output of `pyross.inference.infer_mcmc`.\n        prior_dict: dict\n        contactMatrix: callable, optional\n        generator: pyross.contactMatrix, optional\n        intervention_fun: callable, optional\n        flat: bool, optional\n            This decides whether to return the samples as for each chain separately (False) or as as a combined\n            list (True). Default is True.\n        discard: int, optional\n            The number of initial samples to discard in each chain (to account for burn-in). Default is 0.\n        thin: int, optional\n            Thin out the chain by taking only the n-tn element in each chain. Default is 1 (no thinning).\n        **catchall_kwargs: dict\n            Catched further provided arguments and ignores them.\n\n        Returns\n        -------\n        output_samples: list of dict (if flat=True), or list of list of dict (if flat=False)\n            The processed posterior samples.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_31infer_mcmc_process_result(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sampler = 0;
  PyObject *__pyx_v_prior_dict = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_flat = 0;
  PyObject *__pyx_v_discard = 0;
  PyObject *__pyx_v_thin = 0;
  CYTHON_UNUSED PyObject *__pyx_v_catchall_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infer_mcmc_process_result (wrapper)", 0);
  __pyx_v_catchall_kwargs = PyDict_New(); if (unlikely(!__pyx_v_catchall_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_catchall_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sampler,&__pyx_n_s_prior_dict,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_flat,&__pyx_n_s_discard,&__pyx_n_s_thin,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_XDECREF(__pyx_v_catchall_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_30infer_mcmc_process_result(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_sampler, PyObject *__pyx_v_prior_dict, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_flat, PyObject *__pyx_v_discard, PyObject *__pyx_v_thin, CYTHON_UNUSED PyObject *__pyx_v_catchall_kwargs) {
  PyObject *__pyx_v_prior_names = NULL;
  PyObject *__pyx_v_keys = NULL;
  PyObject *__pyx_v_guess = NULL;
  PyObject *__pyx_v_stds = NULL;
  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
  PyObject *__pyx_v_bounds = NULL;
  PyObject *__pyx_v_flat_guess_range = NULL;
  PyObject *__pyx_v_is_scale_parameter = NULL;
  PyObject *__pyx_v_scaled_guesses = NULL;
  PyObject *__pyx_v_prior = NULL;
  PyObject *__pyx_v_samples = NULL;
  PyObject *__pyx_v_log_posts = NULL;
  PyObject *__pyx_v_samples_per_chain = NULL;
  PyObject *__pyx_v_nr_chains = NULL;
  PyObject *__pyx_v_output_samples = NULL;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_j = NULL;
  PyObject *__pyx_v_sample = NULL;
  PyObject *__pyx_v_l_post = NULL;
  PyObject *__pyx_v_weight = NULL;
  PyObject *__pyx_v_orig_params = NULL;
  PyObject *__pyx_v_map_params_dict = NULL;
  PyObject *__pyx_v_map_control_params_dict = NULL;
  PyObject *__pyx_v_l_prior = NULL;
  PyObject *__pyx_v_l_like = NULL;
  PyObject *__pyx_v_output_dict = NULL;
  CYTHON_UNUSED PyObject *__pyx_8genexpr1__pyx_v__ = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infer_mcmc_process_result", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("pyross.inference.SIR_type.infer_mcmc_process_result", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_prior_names);
  __Pyx_XDECREF(__pyx_v_keys);
  __Pyx_XDECREF(__pyx_v_guess);
  __Pyx_XDECREF(__pyx_v_stds);
  __Pyx_XDECREF(__pyx_v__);
  __Pyx_XDECREF(__pyx_v_bounds);
  __Pyx_XDECREF(__pyx_v_flat_guess_range);
  __Pyx_XDECREF(__pyx_v_is_scale_parameter);
  __Pyx_XDECREF(__pyx_v_scaled_guesses);
  __Pyx_XDECREF(__pyx_v_prior);
  __Pyx_XDECREF(__pyx_v_samples);
  __Pyx_XDECREF(__pyx_v_log_posts);
  __Pyx_XDECREF(__pyx_v_samples_per_chain);
  __Pyx_XDECREF(__pyx_v_nr_chains);
  __Pyx_XDECREF(__pyx_v_output_samples);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_j);
  __Pyx_XDECREF(__pyx_v_sample);
  __Pyx_XDECREF(__pyx_v_l_post);
  __Pyx_XDECREF(__pyx_v_weight);
  __Pyx_XDECREF(__pyx_v_orig_params);
  __Pyx_XDECREF(__pyx_v_map_params_dict);
  __Pyx_XDECREF(__pyx_v_map_control_params_dict);
  __Pyx_XDECREF(__pyx_v_l_prior);
  __Pyx_XDECREF(__pyx_v_l_like);
  __Pyx_XDECREF(__pyx_v_output_dict);
  __Pyx_XDECREF(__pyx_8genexpr1__pyx_v__);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0799:                                   intervention_fun=None, flat=True, discard=0, thin=1, **catchall_kwargs):
    values[4] = ((PyObject *)Py_None);
    values[5] = ((PyObject *)Py_True);
    values[6] = ((PyObject *)__pyx_int_0);
    values[7] = ((PyObject *)__pyx_int_1);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sampler)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prior_dict)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("infer_mcmc_process_result", 0, 2, 8, 1); __PYX_ERR(0, 798, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flat);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_discard);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_thin);
          if (value) { values[7] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_catchall_kwargs, values, pos_args, "infer_mcmc_process_result") < 0)) __PYX_ERR(0, 798, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sampler = values[0];
    __pyx_v_prior_dict = values[1];
    __pyx_v_contactMatrix = values[2];
    __pyx_v_generator = values[3];
    __pyx_v_intervention_fun = values[4];
    __pyx_v_flat = values[5];
    __pyx_v_discard = values[6];
    __pyx_v_thin = values[7];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("infer_mcmc_process_result", 0, 2, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 798, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_catchall_kwargs); __pyx_v_catchall_kwargs = 0;
  __Pyx_AddTraceback("pyross.inference.SIR_type.infer_mcmc_process_result", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_30infer_mcmc_process_result(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_sampler, __pyx_v_prior_dict, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_flat, __pyx_v_discard, __pyx_v_thin, __pyx_v_catchall_kwargs);
 0800:         """
 0801:         Take the sampler generated by `pyross.inference.infer_mcmc` and produce output dictionaries for further use in the
 0802:         pyross framework. See `pyross.inference.infer_mcmc` for additional description of parameters.
 0803: 
 0804:         Parameters
 0805:         ----------
 0806:         sampler: emcee.EnsembleSampler
 0807:             Output of `pyross.inference.infer_mcmc`.
 0808:         prior_dict: dict
 0809:         contactMatrix: callable, optional
 0810:         generator: pyross.contactMatrix, optional
 0811:         intervention_fun: callable, optional
 0812:         flat: bool, optional
 0813:             This decides whether to return the samples as for each chain separately (False) or as as a combined
 0814:             list (True). Default is True.
 0815:         discard: int, optional
 0816:             The number of initial samples to discard in each chain (to account for burn-in). Default is 0.
 0817:         thin: int, optional
 0818:             Thin out the chain by taking only the n-tn element in each chain. Default is 1 (no thinning).
 0819:         **catchall_kwargs: dict
 0820:             Catched further provided arguments and ignores them.
 0821: 
 0822:         Returns
 0823:         -------
 0824:         output_samples: list of dict (if flat=True), or list of list of dict (if flat=False)
 0825:             The processed posterior samples.
 0826:         """
+0827:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 827, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 827, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 827, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 827, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_intervention_fun);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 827, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0828:         prior_names, keys, guess, stds, _, _, bounds, flat_guess_range, is_scale_parameter, scaled_guesses \
  __pyx_v_prior_names = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_keys = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_guess = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_stds = __pyx_t_6;
  __pyx_t_6 = 0;
  __pyx_v__ = __pyx_t_7;
  __pyx_t_7 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_8);
  __pyx_t_8 = 0;
  __pyx_v_bounds = __pyx_t_9;
  __pyx_t_9 = 0;
  __pyx_v_flat_guess_range = __pyx_t_10;
  __pyx_t_10 = 0;
  __pyx_v_is_scale_parameter = __pyx_t_11;
  __pyx_t_11 = 0;
  __pyx_v_scaled_guesses = __pyx_t_12;
  __pyx_t_12 = 0;
+0829:             = pyross.utils.parse_param_prior_dict(prior_dict, self.M, check_length=(not self.param_mapping_enabled))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyross); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_utils); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_parse_param_prior_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->M); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_prior_dict);
  __Pyx_GIVEREF(__pyx_v_prior_dict);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_prior_dict);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyBool_FromLong((!(__pyx_v_self->param_mapping_enabled != 0))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_check_length, __pyx_t_3) < 0) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 10)) {
      if (size > 10) __Pyx_RaiseTooManyValuesError(10);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 828, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_7 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 5); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 6); 
      __pyx_t_10 = PyTuple_GET_ITEM(sequence, 7); 
      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 8); 
      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 9); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_7 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 5); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 6); 
      __pyx_t_10 = PyList_GET_ITEM(sequence, 7); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 8); 
      __pyx_t_12 = PyList_GET_ITEM(sequence, 9); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_t_12);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[10] = {&__pyx_t_2,&__pyx_t_5,&__pyx_t_1,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12};
      for (i=0; i < 10; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 828, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[10] = {&__pyx_t_2,&__pyx_t_5,&__pyx_t_1,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12};
    __pyx_t_13 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 828, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_14 = Py_TYPE(__pyx_t_13)->tp_iternext;
    for (index=0; index < 10; index++) {
      PyObject* item = __pyx_t_14(__pyx_t_13); if (unlikely(!item)) goto __pyx_L3_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 10) < 0) __PYX_ERR(0, 828, __pyx_L1_error)
    __pyx_t_14 = NULL;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_14 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 828, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
+0830:         prior = Prior(prior_names, bounds, guess, stds)
  __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_Prior); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 830, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_11 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
    __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12);
    if (likely(__pyx_t_11)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_12, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_12)) {
    PyObject *__pyx_temp[5] = {__pyx_t_11, __pyx_v_prior_names, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 830, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) {
    PyObject *__pyx_temp[5] = {__pyx_t_11, __pyx_v_prior_names, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 830, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  {
    __pyx_t_10 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 830, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__pyx_t_11) {
      __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11); __pyx_t_11 = NULL;
    }
    __Pyx_INCREF(__pyx_v_prior_names);
    __Pyx_GIVEREF(__pyx_v_prior_names);
    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_4, __pyx_v_prior_names);
    __Pyx_INCREF(__pyx_v_bounds);
    __Pyx_GIVEREF(__pyx_v_bounds);
    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_4, __pyx_v_bounds);
    __Pyx_INCREF(__pyx_v_guess);
    __Pyx_GIVEREF(__pyx_v_guess);
    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_4, __pyx_v_guess);
    __Pyx_INCREF(__pyx_v_stds);
    __Pyx_GIVEREF(__pyx_v_stds);
    PyTuple_SET_ITEM(__pyx_t_10, 3+__pyx_t_4, __pyx_v_stds);
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 830, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_v_prior = __pyx_t_3;
  __pyx_t_3 = 0;
 0831: 
+0832:         samples = sampler.get_chain(flat=flat, thin=thin, discard=discard)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_get_chain); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 832, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_12 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 832, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_flat, __pyx_v_flat) < 0) __PYX_ERR(0, 832, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_thin, __pyx_v_thin) < 0) __PYX_ERR(0, 832, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_discard, __pyx_v_discard) < 0) __PYX_ERR(0, 832, __pyx_L1_error)
  __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 832, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_v_samples = __pyx_t_10;
  __pyx_t_10 = 0;
+0833:         log_posts = sampler.get_log_prob(flat=flat, thin=thin, discard=discard)
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_get_log_prob); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_12 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_flat, __pyx_v_flat) < 0) __PYX_ERR(0, 833, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_thin, __pyx_v_thin) < 0) __PYX_ERR(0, 833, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_discard, __pyx_v_discard) < 0) __PYX_ERR(0, 833, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_empty_tuple, __pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_v_log_posts = __pyx_t_3;
  __pyx_t_3 = 0;
+0834:         samples_per_chain = samples.shape[0]
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_samples, __pyx_n_s_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 834, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_12 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 834, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_samples_per_chain = __pyx_t_12;
  __pyx_t_12 = 0;
+0835:         nr_chains = 1 if flat else samples.shape[1]
  __pyx_t_15 = __Pyx_PyObject_IsTrue(__pyx_v_flat); if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 835, __pyx_L1_error)
  if (__pyx_t_15) {
    __Pyx_INCREF(__pyx_int_1);
    __pyx_t_12 = __pyx_int_1;
  } else {
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_samples, __pyx_n_s_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_10 = __Pyx_GetItemInt(__pyx_t_3, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_12 = __pyx_t_10;
    __pyx_t_10 = 0;
  }
  __pyx_v_nr_chains = __pyx_t_12;
  __pyx_t_12 = 0;
+0836:         if flat:
  __pyx_t_15 = __Pyx_PyObject_IsTrue(__pyx_v_flat); if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 836, __pyx_L1_error)
  if (__pyx_t_15) {
/* … */
    goto __pyx_L5;
  }
+0837:             output_samples = []
    __pyx_t_12 = PyList_New(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 837, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_v_output_samples = ((PyObject*)__pyx_t_12);
    __pyx_t_12 = 0;
 0838:         else:
+0839:             output_samples = [[] for _ in nr_chains]
  /*else*/ {
    { /* enter inner scope */
      __pyx_t_12 = PyList_New(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 839, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_12);
      if (likely(PyList_CheckExact(__pyx_v_nr_chains)) || PyTuple_CheckExact(__pyx_v_nr_chains)) {
        __pyx_t_10 = __pyx_v_nr_chains; __Pyx_INCREF(__pyx_t_10); __pyx_t_16 = 0;
        __pyx_t_17 = NULL;
      } else {
        __pyx_t_16 = -1; __pyx_t_10 = PyObject_GetIter(__pyx_v_nr_chains); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 839, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_17 = Py_TYPE(__pyx_t_10)->tp_iternext; if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 839, __pyx_L8_error)
      }
      for (;;) {
        if (likely(!__pyx_t_17)) {
          if (likely(PyList_CheckExact(__pyx_t_10))) {
            if (__pyx_t_16 >= PyList_GET_SIZE(__pyx_t_10)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_3 = PyList_GET_ITEM(__pyx_t_10, __pyx_t_16); __Pyx_INCREF(__pyx_t_3); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 839, __pyx_L8_error)
            #else
            __pyx_t_3 = PySequence_ITEM(__pyx_t_10, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 839, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_3);
            #endif
          } else {
            if (__pyx_t_16 >= PyTuple_GET_SIZE(__pyx_t_10)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_10, __pyx_t_16); __Pyx_INCREF(__pyx_t_3); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 839, __pyx_L8_error)
            #else
            __pyx_t_3 = PySequence_ITEM(__pyx_t_10, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 839, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_3);
            #endif
          }
        } else {
          __pyx_t_3 = __pyx_t_17(__pyx_t_10);
          if (unlikely(!__pyx_t_3)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 839, __pyx_L8_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_3);
        }
        __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v__, __pyx_t_3);
        __pyx_t_3 = 0;
        __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 839, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_12, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 839, __pyx_L8_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_8genexpr1__pyx_v__); __pyx_8genexpr1__pyx_v__ = 0;
      goto __pyx_L11_exit_scope;
      __pyx_L8_error:;
      __Pyx_XDECREF(__pyx_8genexpr1__pyx_v__); __pyx_8genexpr1__pyx_v__ = 0;
      goto __pyx_L1_error;
      __pyx_L11_exit_scope:;
    } /* exit inner scope */
    __pyx_v_output_samples = ((PyObject*)__pyx_t_12);
    __pyx_t_12 = 0;
  }
  __pyx_L5:;
 0840: 
+0841:         for i in range(samples_per_chain):
  __pyx_t_12 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_v_samples_per_chain); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 841, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  if (likely(PyList_CheckExact(__pyx_t_12)) || PyTuple_CheckExact(__pyx_t_12)) {
    __pyx_t_10 = __pyx_t_12; __Pyx_INCREF(__pyx_t_10); __pyx_t_16 = 0;
    __pyx_t_17 = NULL;
  } else {
    __pyx_t_16 = -1; __pyx_t_10 = PyObject_GetIter(__pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 841, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_17 = Py_TYPE(__pyx_t_10)->tp_iternext; if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 841, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  for (;;) {
    if (likely(!__pyx_t_17)) {
      if (likely(PyList_CheckExact(__pyx_t_10))) {
        if (__pyx_t_16 >= PyList_GET_SIZE(__pyx_t_10)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_12 = PyList_GET_ITEM(__pyx_t_10, __pyx_t_16); __Pyx_INCREF(__pyx_t_12); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 841, __pyx_L1_error)
        #else
        __pyx_t_12 = PySequence_ITEM(__pyx_t_10, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 841, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        #endif
      } else {
        if (__pyx_t_16 >= PyTuple_GET_SIZE(__pyx_t_10)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_12 = PyTuple_GET_ITEM(__pyx_t_10, __pyx_t_16); __Pyx_INCREF(__pyx_t_12); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 841, __pyx_L1_error)
        #else
        __pyx_t_12 = PySequence_ITEM(__pyx_t_10, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 841, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        #endif
      }
    } else {
      __pyx_t_12 = __pyx_t_17(__pyx_t_10);
      if (unlikely(!__pyx_t_12)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 841, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_12);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_12);
    __pyx_t_12 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+0842:             for j in range(nr_chains):
    __pyx_t_12 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_v_nr_chains); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 842, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    if (likely(PyList_CheckExact(__pyx_t_12)) || PyTuple_CheckExact(__pyx_t_12)) {
      __pyx_t_3 = __pyx_t_12; __Pyx_INCREF(__pyx_t_3); __pyx_t_18 = 0;
      __pyx_t_19 = NULL;
    } else {
      __pyx_t_18 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 842, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_19 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 842, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    for (;;) {
      if (likely(!__pyx_t_19)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_18 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_12 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_18); __Pyx_INCREF(__pyx_t_12); __pyx_t_18++; if (unlikely(0 < 0)) __PYX_ERR(0, 842, __pyx_L1_error)
          #else
          __pyx_t_12 = PySequence_ITEM(__pyx_t_3, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 842, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          #endif
        } else {
          if (__pyx_t_18 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_12 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_18); __Pyx_INCREF(__pyx_t_12); __pyx_t_18++; if (unlikely(0 < 0)) __PYX_ERR(0, 842, __pyx_L1_error)
          #else
          __pyx_t_12 = PySequence_ITEM(__pyx_t_3, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 842, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          #endif
        }
      } else {
        __pyx_t_12 = __pyx_t_19(__pyx_t_3);
        if (unlikely(!__pyx_t_12)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 842, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_12);
      }
      __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_12);
      __pyx_t_12 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0843:                 if flat:
      __pyx_t_15 = __Pyx_PyObject_IsTrue(__pyx_v_flat); if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 843, __pyx_L1_error)
      if (__pyx_t_15) {
/* … */
        goto __pyx_L16;
      }
+0844:                     sample = samples[i,:]
        __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 844, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_INCREF(__pyx_v_i);
        __Pyx_GIVEREF(__pyx_v_i);
        PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_i);
        __Pyx_INCREF(__pyx_slice_);
        __Pyx_GIVEREF(__pyx_slice_);
        PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_slice_);
        __pyx_t_11 = __Pyx_PyObject_GetItem(__pyx_v_samples, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 844, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF_SET(__pyx_v_sample, __pyx_t_11);
        __pyx_t_11 = 0;
+0845:                     l_post = log_posts[i]
        __pyx_t_11 = __Pyx_PyObject_GetItem(__pyx_v_log_posts, __pyx_v_i); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 845, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_XDECREF_SET(__pyx_v_l_post, __pyx_t_11);
        __pyx_t_11 = 0;
 0846:                 else:
+0847:                     sample = samples[i, j, :]
      /*else*/ {
        __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 847, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_INCREF(__pyx_v_i);
        __Pyx_GIVEREF(__pyx_v_i);
        PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_i);
        __Pyx_INCREF(__pyx_v_j);
        __Pyx_GIVEREF(__pyx_v_j);
        PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_j);
        __Pyx_INCREF(__pyx_slice_);
        __Pyx_GIVEREF(__pyx_slice_);
        PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_slice_);
        __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_v_samples, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 847, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_XDECREF_SET(__pyx_v_sample, __pyx_t_12);
        __pyx_t_12 = 0;
+0848:                     l_post = log_posts[i, j]
        __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 848, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_INCREF(__pyx_v_i);
        __Pyx_GIVEREF(__pyx_v_i);
        PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_i);
        __Pyx_INCREF(__pyx_v_j);
        __Pyx_GIVEREF(__pyx_v_j);
        PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_j);
        __pyx_t_11 = __Pyx_PyObject_GetItem(__pyx_v_log_posts, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 848, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF_SET(__pyx_v_l_post, __pyx_t_11);
        __pyx_t_11 = 0;
      }
      __pyx_L16:;
+0849:                 weight = 1.0 / (samples_per_chain * nr_chains)
      __pyx_t_11 = PyNumber_Multiply(__pyx_v_samples_per_chain, __pyx_v_nr_chains); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 849, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_12 = __Pyx_PyFloat_TrueDivideCObj(__pyx_float_1_0, __pyx_t_11, 1.0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 849, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF_SET(__pyx_v_weight, __pyx_t_12);
      __pyx_t_12 = 0;
 0850: 
+0851:                 orig_params = pyross.utils.unflatten_parameters(sample, flat_guess_range,
      __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_pyross); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 851, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_utils); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 851, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_unflatten_parameters); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 851, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+0852:                                                                 is_scale_parameter, scaled_guesses)
      __pyx_t_9 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_9)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
          __pyx_t_4 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_11)) {
        PyObject *__pyx_temp[5] = {__pyx_t_9, __pyx_v_sample, __pyx_v_flat_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_guesses};
        __pyx_t_12 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 851, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_GOTREF(__pyx_t_12);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
        PyObject *__pyx_temp[5] = {__pyx_t_9, __pyx_v_sample, __pyx_v_flat_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_guesses};
        __pyx_t_12 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 851, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_GOTREF(__pyx_t_12);
      } else
      #endif
      {
        __pyx_t_8 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 851, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (__pyx_t_9) {
          __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9); __pyx_t_9 = NULL;
        }
        __Pyx_INCREF(__pyx_v_sample);
        __Pyx_GIVEREF(__pyx_v_sample);
        PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_4, __pyx_v_sample);
        __Pyx_INCREF(__pyx_v_flat_guess_range);
        __Pyx_GIVEREF(__pyx_v_flat_guess_range);
        PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_4, __pyx_v_flat_guess_range);
        __Pyx_INCREF(__pyx_v_is_scale_parameter);
        __Pyx_GIVEREF(__pyx_v_is_scale_parameter);
        PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_4, __pyx_v_is_scale_parameter);
        __Pyx_INCREF(__pyx_v_scaled_guesses);
        __Pyx_GIVEREF(__pyx_v_scaled_guesses);
        PyTuple_SET_ITEM(__pyx_t_8, 3+__pyx_t_4, __pyx_v_scaled_guesses);
        __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_8, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 851, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF_SET(__pyx_v_orig_params, __pyx_t_12);
      __pyx_t_12 = 0;
 0853: 
+0854:                 map_params_dict, map_control_params_dict = self.fill_params_dict(keys, orig_params, return_additional_params=True)
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_fill_params_dict); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 854, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 854, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_INCREF(__pyx_v_keys);
      __Pyx_GIVEREF(__pyx_v_keys);
      PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_keys);
      __Pyx_INCREF(__pyx_v_orig_params);
      __Pyx_GIVEREF(__pyx_v_orig_params);
      PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_orig_params);
      __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 854, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_return_additional_params, Py_True) < 0) __PYX_ERR(0, 854, __pyx_L1_error)
      __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_11, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 854, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if ((likely(PyTuple_CheckExact(__pyx_t_9))) || (PyList_CheckExact(__pyx_t_9))) {
        PyObject* sequence = __pyx_t_9;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 854, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_8 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_11 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_11);
        #else
        __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 854, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 854, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        #endif
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_12 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 854, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_14 = Py_TYPE(__pyx_t_12)->tp_iternext;
        index = 0; __pyx_t_8 = __pyx_t_14(__pyx_t_12); if (unlikely(!__pyx_t_8)) goto __pyx_L17_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_8);
        index = 1; __pyx_t_11 = __pyx_t_14(__pyx_t_12); if (unlikely(!__pyx_t_11)) goto __pyx_L17_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_11);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_12), 2) < 0) __PYX_ERR(0, 854, __pyx_L1_error)
        __pyx_t_14 = NULL;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        goto __pyx_L18_unpacking_done;
        __pyx_L17_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_14 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 854, __pyx_L1_error)
        __pyx_L18_unpacking_done:;
      }
      __Pyx_XDECREF_SET(__pyx_v_map_params_dict, __pyx_t_8);
      __pyx_t_8 = 0;
      __Pyx_XDECREF_SET(__pyx_v_map_control_params_dict, __pyx_t_11);
      __pyx_t_11 = 0;
+0855:                 self.set_params(map_params_dict)
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_params); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 855, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
        }
      }
      __pyx_t_9 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_8, __pyx_v_map_params_dict) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_map_params_dict);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 855, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 0856: 
+0857:                 if generator is not None:
      __pyx_t_15 = (__pyx_v_generator != Py_None);
      __pyx_t_20 = (__pyx_t_15 != 0);
      if (__pyx_t_20) {
/* … */
      }
+0858:                     if intervention_fun is None:
        __pyx_t_20 = (__pyx_v_intervention_fun == Py_None);
        __pyx_t_15 = (__pyx_t_20 != 0);
        if (__pyx_t_15) {
/* … */
          goto __pyx_L20;
        }
+0859:                         self.contactMatrix = generator.constant_contactMatrix(**map_control_params_dict)
          __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_constant_contactMatrix); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 859, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          if (unlikely(__pyx_v_map_control_params_dict == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
            __PYX_ERR(0, 859, __pyx_L1_error)
          }
          if (likely(PyDict_CheckExact(__pyx_v_map_control_params_dict))) {
            __pyx_t_11 = PyDict_Copy(__pyx_v_map_control_params_dict); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 859, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_11);
          } else {
            __pyx_t_11 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_map_control_params_dict, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 859, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_11);
          }
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, __pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 859, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_GIVEREF(__pyx_t_8);
          __Pyx_GOTREF(__pyx_v_self->contactMatrix);
          __Pyx_DECREF(__pyx_v_self->contactMatrix);
          __pyx_v_self->contactMatrix = __pyx_t_8;
          __pyx_t_8 = 0;
 0860:                     else:
+0861:                         self.contactMatrix = generator.intervention_custom_temporal(intervention_fun, **map_control_params_dict)
        /*else*/ {
          __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_intervention_custom_temporal); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 861, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 861, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_INCREF(__pyx_v_intervention_fun);
          __Pyx_GIVEREF(__pyx_v_intervention_fun);
          PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_intervention_fun);
          if (unlikely(__pyx_v_map_control_params_dict == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
            __PYX_ERR(0, 861, __pyx_L1_error)
          }
          if (likely(PyDict_CheckExact(__pyx_v_map_control_params_dict))) {
            __pyx_t_9 = PyDict_Copy(__pyx_v_map_control_params_dict); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 861, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
          } else {
            __pyx_t_9 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_map_control_params_dict, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 861, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
          }
          __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, __pyx_t_9); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 861, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_GIVEREF(__pyx_t_12);
          __Pyx_GOTREF(__pyx_v_self->contactMatrix);
          __Pyx_DECREF(__pyx_v_self->contactMatrix);
          __pyx_v_self->contactMatrix = __pyx_t_12;
          __pyx_t_12 = 0;
        }
        __pyx_L20:;
 0862: 
+0863:                 l_prior = np.sum(prior.logpdf(sample))
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 863, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_sum); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 863, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_prior, __pyx_n_s_logpdf); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 863, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
        }
      }
      __pyx_t_9 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_7, __pyx_v_sample) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_sample);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 863, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
        }
      }
      __pyx_t_12 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_8, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 863, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF_SET(__pyx_v_l_prior, __pyx_t_12);
      __pyx_t_12 = 0;
+0864:                 l_like = l_post - l_prior
      __pyx_t_12 = PyNumber_Subtract(__pyx_v_l_post, __pyx_v_l_prior); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 864, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_XDECREF_SET(__pyx_v_l_like, __pyx_t_12);
      __pyx_t_12 = 0;
 0865:                 output_dict = {
+0866:                     'params_dict': map_params_dict, 'flat_params': sample, 'param_keys': keys,
      __pyx_t_12 = __Pyx_PyDict_NewPresized(11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 866, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_params_dict, __pyx_v_map_params_dict) < 0) __PYX_ERR(0, 866, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_flat_params, __pyx_v_sample) < 0) __PYX_ERR(0, 866, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_param_keys, __pyx_v_keys) < 0) __PYX_ERR(0, 866, __pyx_L1_error)
+0867:                     'log_posterior':l_post, 'log_prior':l_prior, 'log_likelihood':l_like,
      if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_log_posterior, __pyx_v_l_post) < 0) __PYX_ERR(0, 866, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_log_prior, __pyx_v_l_prior) < 0) __PYX_ERR(0, 866, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_log_likelihood, __pyx_v_l_like) < 0) __PYX_ERR(0, 866, __pyx_L1_error)
+0868:                     'weight':weight, 'is_scale_parameter':is_scale_parameter,
      if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_weight, __pyx_v_weight) < 0) __PYX_ERR(0, 866, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_is_scale_parameter, __pyx_v_is_scale_parameter) < 0) __PYX_ERR(0, 866, __pyx_L1_error)
+0869:                     'param_guess_range':flat_guess_range,
      if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_param_guess_range, __pyx_v_flat_guess_range) < 0) __PYX_ERR(0, 866, __pyx_L1_error)
+0870:                     'scaled_param_guesses':scaled_guesses,
      if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_scaled_param_guesses, __pyx_v_scaled_guesses) < 0) __PYX_ERR(0, 866, __pyx_L1_error)
+0871:                     'prior':prior
      if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_prior, __pyx_v_prior) < 0) __PYX_ERR(0, 866, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_output_dict, ((PyObject*)__pyx_t_12));
      __pyx_t_12 = 0;
 0872:                 }
+0873:                 if map_control_params_dict != {}:
      __pyx_t_12 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 873, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_11 = PyObject_RichCompare(__pyx_v_map_control_params_dict, __pyx_t_12, Py_NE); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 873, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_15 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 873, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (__pyx_t_15) {
/* … */
      }
+0874:                     output_dict['control_params_dict'] = map_control_params_dict
        if (unlikely(PyDict_SetItem(__pyx_v_output_dict, __pyx_n_u_control_params_dict, __pyx_v_map_control_params_dict) < 0)) __PYX_ERR(0, 874, __pyx_L1_error)
 0875: 
+0876:                 if flat:
      __pyx_t_15 = __Pyx_PyObject_IsTrue(__pyx_v_flat); if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 876, __pyx_L1_error)
      if (__pyx_t_15) {
/* … */
        goto __pyx_L22;
      }
+0877:                     output_samples.append(output_dict)
        __pyx_t_21 = __Pyx_PyList_Append(__pyx_v_output_samples, __pyx_v_output_dict); if (unlikely(__pyx_t_21 == ((int)-1))) __PYX_ERR(0, 877, __pyx_L1_error)
 0878:                 else:
+0879:                     output_samples[j].append(output_dict)
      /*else*/ {
        __pyx_t_11 = __Pyx_PyObject_GetItem(__pyx_v_output_samples, __pyx_v_j); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 879, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_21 = __Pyx_PyObject_Append(__pyx_t_11, __pyx_v_output_dict); if (unlikely(__pyx_t_21 == ((int)-1))) __PYX_ERR(0, 879, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      }
      __pyx_L22:;
 0880: 
+0881:         return output_samples
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_output_samples);
  __pyx_r = __pyx_v_output_samples;
  goto __pyx_L0;
 0882: 
 0883: 
+0884:     def _mean(self, params, contactMatrix=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_33_mean(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_32_mean[] = "Objective function for differentiation call in FIM and FIM_det.";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_33_mean(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_params = 0;
  CYTHON_UNUSED PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_param_keys = 0;
  PyObject *__pyx_v_param_guess_range = 0;
  PyObject *__pyx_v_is_scale_parameter = 0;
  PyObject *__pyx_v_scaled_param_guesses = 0;
  PyObject *__pyx_v_x0 = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_inter_steps = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_mean (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_params,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_param_keys,&__pyx_n_s_param_guess_range,&__pyx_n_s_is_scale_parameter,&__pyx_n_s_scaled_param_guesses,&__pyx_n_s_x0,&__pyx_n_s_Tf,&__pyx_n_s_inter_steps,0};
    PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0};
    values[1] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_32_mean(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_params, CYTHON_UNUSED PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_param_keys, PyObject *__pyx_v_param_guess_range, PyObject *__pyx_v_is_scale_parameter, PyObject *__pyx_v_scaled_param_guesses, PyObject *__pyx_v_x0, PyObject *__pyx_v_Tf, PyObject *__pyx_v_inter_steps) {
  PyObject *__pyx_v_param_estimates = NULL;
  PyObject *__pyx_v_orig_params = NULL;
  PyObject *__pyx_v_map_params_dict = NULL;
  PyObject *__pyx_v_map_control_params_dict = NULL;
  PyObject *__pyx_v_Nf = NULL;
  PyObject *__pyx_v_xm = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_mean", 0);
  __Pyx_INCREF(__pyx_v_x0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pyross.inference.SIR_type._mean", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_param_estimates);
  __Pyx_XDECREF(__pyx_v_orig_params);
  __Pyx_XDECREF(__pyx_v_map_params_dict);
  __Pyx_XDECREF(__pyx_v_map_control_params_dict);
  __Pyx_XDECREF(__pyx_v_Nf);
  __Pyx_XDECREF(__pyx_v_xm);
  __Pyx_XDECREF(__pyx_v_x0);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0885:                       generator=None, intervention_fun=None,
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_None);
+0886:               param_keys=None,
    values[4] = ((PyObject *)Py_None);
+0887:                             param_guess_range=None, is_scale_parameter=None,
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_None);
+0888:                             scaled_param_guesses=None,
    values[7] = ((PyObject *)Py_None);
+0889:                             x0=None, Tf=None, inter_steps=None):
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject *)Py_None);
    values[10] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_params)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_keys);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_guess_range);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_is_scale_parameter);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_scaled_param_guesses);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x0);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[10] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_mean") < 0)) __PYX_ERR(0, 884, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_params = values[0];
    __pyx_v_contactMatrix = values[1];
    __pyx_v_generator = values[2];
    __pyx_v_intervention_fun = values[3];
    __pyx_v_param_keys = values[4];
    __pyx_v_param_guess_range = values[5];
    __pyx_v_is_scale_parameter = values[6];
    __pyx_v_scaled_param_guesses = values[7];
    __pyx_v_x0 = values[8];
    __pyx_v_Tf = values[9];
    __pyx_v_inter_steps = values[10];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_mean", 0, 1, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 884, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type._mean", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_32_mean(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_params, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_param_keys, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses, __pyx_v_x0, __pyx_v_Tf, __pyx_v_inter_steps);
 0890:         """Objective function for differentiation call in FIM and FIM_det."""
+0891:         param_estimates = np.copy(params)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_params) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_params);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_param_estimates = __pyx_t_1;
  __pyx_t_1 = 0;
 0892: 
+0893:         orig_params = pyross.utils.unflatten_parameters(param_estimates,
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyross); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 893, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_utils); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 893, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unflatten_parameters); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 893, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0894:                                                       param_guess_range,
 0895:                                                       is_scale_parameter,
+0896:                                                       scaled_param_guesses)
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[5] = {__pyx_t_2, __pyx_v_param_estimates, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 893, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[5] = {__pyx_t_2, __pyx_v_param_estimates, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 893, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 893, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_v_param_estimates);
    __Pyx_GIVEREF(__pyx_v_param_estimates);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_param_estimates);
    __Pyx_INCREF(__pyx_v_param_guess_range);
    __Pyx_GIVEREF(__pyx_v_param_guess_range);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_param_guess_range);
    __Pyx_INCREF(__pyx_v_is_scale_parameter);
    __Pyx_GIVEREF(__pyx_v_is_scale_parameter);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_is_scale_parameter);
    __Pyx_INCREF(__pyx_v_scaled_param_guesses);
    __Pyx_GIVEREF(__pyx_v_scaled_param_guesses);
    PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_v_scaled_param_guesses);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 893, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_orig_params = __pyx_t_1;
  __pyx_t_1 = 0;
 0897: 
+0898:         map_params_dict, map_control_params_dict = self.fill_params_dict(param_keys, orig_params, return_additional_params=True)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_fill_params_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 898, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 898, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_param_keys);
  __Pyx_GIVEREF(__pyx_v_param_keys);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_param_keys);
  __Pyx_INCREF(__pyx_v_orig_params);
  __Pyx_GIVEREF(__pyx_v_orig_params);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_orig_params);
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 898, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return_additional_params, Py_True) < 0) __PYX_ERR(0, 898, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 898, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 898, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 898, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 898, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 898, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = Py_TYPE(__pyx_t_1)->tp_iternext;
    index = 0; __pyx_t_5 = __pyx_t_6(__pyx_t_1); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_1), 2) < 0) __PYX_ERR(0, 898, __pyx_L1_error)
    __pyx_t_6 = NULL;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 898, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_map_params_dict = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_map_control_params_dict = __pyx_t_3;
  __pyx_t_3 = 0;
+0899:         self.set_params(map_params_dict)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_params); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 899, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_v_map_params_dict) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_map_params_dict);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 899, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0900: 
+0901:         if generator is not None:
  __pyx_t_7 = (__pyx_v_generator != Py_None);
  __pyx_t_8 = (__pyx_t_7 != 0);
  if (__pyx_t_8) {
/* … */
  }
+0902:             if intervention_fun is None:
    __pyx_t_8 = (__pyx_v_intervention_fun == Py_None);
    __pyx_t_7 = (__pyx_t_8 != 0);
    if (__pyx_t_7) {
/* … */
      goto __pyx_L6;
    }
+0903:                 self.contactMatrix = generator.constant_contactMatrix(**map_control_params_dict)
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_constant_contactMatrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 903, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (unlikely(__pyx_v_map_control_params_dict == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
        __PYX_ERR(0, 903, __pyx_L1_error)
      }
      if (likely(PyDict_CheckExact(__pyx_v_map_control_params_dict))) {
        __pyx_t_3 = PyDict_Copy(__pyx_v_map_control_params_dict); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 903, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      } else {
        __pyx_t_3 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_map_control_params_dict, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 903, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 903, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GIVEREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_v_self->contactMatrix);
      __Pyx_DECREF(__pyx_v_self->contactMatrix);
      __pyx_v_self->contactMatrix = __pyx_t_5;
      __pyx_t_5 = 0;
 0904:             else:
+0905:                 self.contactMatrix = generator.intervention_custom_temporal(intervention_fun, **map_control_params_dict)
    /*else*/ {
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_intervention_custom_temporal); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 905, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 905, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_v_intervention_fun);
      __Pyx_GIVEREF(__pyx_v_intervention_fun);
      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_intervention_fun);
      if (unlikely(__pyx_v_map_control_params_dict == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
        __PYX_ERR(0, 905, __pyx_L1_error)
      }
      if (likely(PyDict_CheckExact(__pyx_v_map_control_params_dict))) {
        __pyx_t_2 = PyDict_Copy(__pyx_v_map_control_params_dict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 905, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      } else {
        __pyx_t_2 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_map_control_params_dict, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 905, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 905, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_v_self->contactMatrix);
      __Pyx_DECREF(__pyx_v_self->contactMatrix);
      __pyx_v_self->contactMatrix = __pyx_t_1;
      __pyx_t_1 = 0;
    }
    __pyx_L6:;
 0906: 
+0907:         Nf = Tf+1
  __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_v_Tf, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 907, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_Nf = __pyx_t_1;
  __pyx_t_1 = 0;
 0908: 
+0909:         if inter_steps:
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_inter_steps); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 909, __pyx_L1_error)
  if (__pyx_t_7) {
/* … */
    goto __pyx_L7;
  }
+0910:             x0 = np.multiply(x0, self.Omega)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 910, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_multiply); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 910, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->Omega); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 910, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_4 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_x0, __pyx_t_2};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 910, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_x0, __pyx_t_2};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 910, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    {
      __pyx_t_9 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 910, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_INCREF(__pyx_v_x0);
      __Pyx_GIVEREF(__pyx_v_x0);
      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_4, __pyx_v_x0);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_4, __pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 910, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_x0, __pyx_t_1);
    __pyx_t_1 = 0;
+0911:             xm = pyross.utils.forward_euler_integration(self._rhs0, x0, 0, Tf, Nf, inter_steps)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyross); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_utils); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_forward_euler_integration); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_rhs0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_2 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_4 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[7] = {__pyx_t_2, __pyx_t_9, __pyx_v_x0, __pyx_int_0, __pyx_v_Tf, __pyx_v_Nf, __pyx_v_inter_steps};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 6+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[7] = {__pyx_t_2, __pyx_t_9, __pyx_v_x0, __pyx_int_0, __pyx_v_Tf, __pyx_v_Nf, __pyx_v_inter_steps};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 6+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    } else
    #endif
    {
      __pyx_t_5 = PyTuple_New(6+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 911, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_t_9);
      __Pyx_INCREF(__pyx_v_x0);
      __Pyx_GIVEREF(__pyx_v_x0);
      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_x0);
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_int_0);
      __Pyx_INCREF(__pyx_v_Tf);
      __Pyx_GIVEREF(__pyx_v_Tf);
      PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_v_Tf);
      __Pyx_INCREF(__pyx_v_Nf);
      __Pyx_GIVEREF(__pyx_v_Nf);
      PyTuple_SET_ITEM(__pyx_t_5, 4+__pyx_t_4, __pyx_v_Nf);
      __Pyx_INCREF(__pyx_v_inter_steps);
      __Pyx_GIVEREF(__pyx_v_inter_steps);
      PyTuple_SET_ITEM(__pyx_t_5, 5+__pyx_t_4, __pyx_v_inter_steps);
      __pyx_t_9 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_xm = __pyx_t_1;
    __pyx_t_1 = 0;
+0912:             xm = xm[::inter_steps]
    __pyx_t_1 = PySlice_New(Py_None, Py_None, __pyx_v_inter_steps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_xm, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_xm, __pyx_t_3);
    __pyx_t_3 = 0;
+0913:             xm = np.divide(xm, self.Omega)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_divide); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->Omega); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_9 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_4 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_v_xm, __pyx_t_1};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 913, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_v_xm, __pyx_t_1};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 913, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    {
      __pyx_t_2 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 913, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (__pyx_t_9) {
        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_9); __pyx_t_9 = NULL;
      }
      __Pyx_INCREF(__pyx_v_xm);
      __Pyx_GIVEREF(__pyx_v_xm);
      PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_4, __pyx_v_xm);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_4, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 913, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF_SET(__pyx_v_xm, __pyx_t_3);
    __pyx_t_3 = 0;
 0914:         else:
+0915:             xm = self.integrate(x0, 0, Tf, Nf)
  /*else*/ {
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_integrate); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 915, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_4 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[5] = {__pyx_t_2, __pyx_v_x0, __pyx_int_0, __pyx_v_Tf, __pyx_v_Nf};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 915, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_3);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[5] = {__pyx_t_2, __pyx_v_x0, __pyx_int_0, __pyx_v_Tf, __pyx_v_Nf};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 915, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_3);
    } else
    #endif
    {
      __pyx_t_1 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 915, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_INCREF(__pyx_v_x0);
      __Pyx_GIVEREF(__pyx_v_x0);
      PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_4, __pyx_v_x0);
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_4, __pyx_int_0);
      __Pyx_INCREF(__pyx_v_Tf);
      __Pyx_GIVEREF(__pyx_v_Tf);
      PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_4, __pyx_v_Tf);
      __Pyx_INCREF(__pyx_v_Nf);
      __Pyx_GIVEREF(__pyx_v_Nf);
      PyTuple_SET_ITEM(__pyx_t_1, 3+__pyx_t_4, __pyx_v_Nf);
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 915, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_v_xm = __pyx_t_3;
    __pyx_t_3 = 0;
  }
  __pyx_L7:;
+0916:         return np.ravel(xm[1:])
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ravel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetSlice(__pyx_v_xm, 1, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
/* … */
  __pyx_slice__8 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__8)) __PYX_ERR(0, 916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__8);
  __Pyx_GIVEREF(__pyx_slice__8);
 0917: 
 0918: 
+0919:     def _cov(self, params, contactMatrix=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_35_cov(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_34_cov[] = "Objective function for differentiation call in FIM.";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_35_cov(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_params = 0;
  CYTHON_UNUSED PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_param_keys = 0;
  PyObject *__pyx_v_param_guess_range = 0;
  PyObject *__pyx_v_is_scale_parameter = 0;
  PyObject *__pyx_v_scaled_param_guesses = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_x0 = 0;
  PyObject *__pyx_v_inter_steps = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_cov (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_params,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_param_keys,&__pyx_n_s_param_guess_range,&__pyx_n_s_is_scale_parameter,&__pyx_n_s_scaled_param_guesses,&__pyx_n_s_Tf,&__pyx_n_s_x0,&__pyx_n_s_inter_steps,&__pyx_n_s_tangent,0};
    PyObject* values[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
    values[1] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_34_cov(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_params, CYTHON_UNUSED PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_param_keys, PyObject *__pyx_v_param_guess_range, PyObject *__pyx_v_is_scale_parameter, PyObject *__pyx_v_scaled_param_guesses, PyObject *__pyx_v_Tf, PyObject *__pyx_v_x0, PyObject *__pyx_v_inter_steps, PyObject *__pyx_v_tangent) {
  PyObject *__pyx_v_param_estimates = NULL;
  PyObject *__pyx_v_orig_params = NULL;
  PyObject *__pyx_v_map_params_dict = NULL;
  PyObject *__pyx_v_map_control_params_dict = NULL;
  PyObject *__pyx_v_Nf = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_xm = NULL;
  PyObject *__pyx_v_full_cov = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_cov", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_AddTraceback("pyross.inference.SIR_type._cov", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_param_estimates);
  __Pyx_XDECREF(__pyx_v_orig_params);
  __Pyx_XDECREF(__pyx_v_map_params_dict);
  __Pyx_XDECREF(__pyx_v_map_control_params_dict);
  __Pyx_XDECREF(__pyx_v_Nf);
  __Pyx_XDECREF(__pyx_v_xm);
  __Pyx_XDECREF(__pyx_v_full_cov);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0920:              generator=None, intervention_fun=None,
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_None);
+0921:              param_keys=None,
    values[4] = ((PyObject *)Py_None);
+0922:                             param_guess_range=None, is_scale_parameter=None,
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_None);
+0923:                             scaled_param_guesses=None,
    values[7] = ((PyObject *)Py_None);
+0924:                             Tf=None, x0=None,
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject *)Py_None);
+0925:                             inter_steps=None, tangent=False):
    values[10] = ((PyObject *)Py_None);
    values[11] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_params)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_keys);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_guess_range);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_is_scale_parameter);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_scaled_param_guesses);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x0);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[11] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_cov") < 0)) __PYX_ERR(0, 919, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_params = values[0];
    __pyx_v_contactMatrix = values[1];
    __pyx_v_generator = values[2];
    __pyx_v_intervention_fun = values[3];
    __pyx_v_param_keys = values[4];
    __pyx_v_param_guess_range = values[5];
    __pyx_v_is_scale_parameter = values[6];
    __pyx_v_scaled_param_guesses = values[7];
    __pyx_v_Tf = values[8];
    __pyx_v_x0 = values[9];
    __pyx_v_inter_steps = values[10];
    __pyx_v_tangent = values[11];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_cov", 0, 1, 12, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 919, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type._cov", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_34_cov(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_params, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_param_keys, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses, __pyx_v_Tf, __pyx_v_x0, __pyx_v_inter_steps, __pyx_v_tangent);
 0926:         """Objective function for differentiation call in FIM."""
+0927:         param_estimates = np.copy(params)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_params) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_params);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_param_estimates = __pyx_t_1;
  __pyx_t_1 = 0;
 0928: 
+0929:         orig_params = pyross.utils.unflatten_parameters(param_estimates,
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyross); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 929, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_utils); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 929, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unflatten_parameters); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 929, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0930:                                                       param_guess_range,
 0931:                                                       is_scale_parameter,
+0932:                                                       scaled_param_guesses)
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[5] = {__pyx_t_2, __pyx_v_param_estimates, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 929, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[5] = {__pyx_t_2, __pyx_v_param_estimates, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 929, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 929, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_v_param_estimates);
    __Pyx_GIVEREF(__pyx_v_param_estimates);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_param_estimates);
    __Pyx_INCREF(__pyx_v_param_guess_range);
    __Pyx_GIVEREF(__pyx_v_param_guess_range);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_param_guess_range);
    __Pyx_INCREF(__pyx_v_is_scale_parameter);
    __Pyx_GIVEREF(__pyx_v_is_scale_parameter);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_is_scale_parameter);
    __Pyx_INCREF(__pyx_v_scaled_param_guesses);
    __Pyx_GIVEREF(__pyx_v_scaled_param_guesses);
    PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_v_scaled_param_guesses);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 929, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_orig_params = __pyx_t_1;
  __pyx_t_1 = 0;
 0933: 
+0934:         map_params_dict, map_control_params_dict = self.fill_params_dict(param_keys, orig_params, return_additional_params=True)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_fill_params_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 934, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 934, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_param_keys);
  __Pyx_GIVEREF(__pyx_v_param_keys);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_param_keys);
  __Pyx_INCREF(__pyx_v_orig_params);
  __Pyx_GIVEREF(__pyx_v_orig_params);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_orig_params);
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 934, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return_additional_params, Py_True) < 0) __PYX_ERR(0, 934, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 934, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 934, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 934, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 934, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 934, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = Py_TYPE(__pyx_t_1)->tp_iternext;
    index = 0; __pyx_t_5 = __pyx_t_6(__pyx_t_1); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_1), 2) < 0) __PYX_ERR(0, 934, __pyx_L1_error)
    __pyx_t_6 = NULL;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 934, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_map_params_dict = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_map_control_params_dict = __pyx_t_3;
  __pyx_t_3 = 0;
+0935:         self.set_params(map_params_dict)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_params); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_v_map_params_dict) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_map_params_dict);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0936: 
+0937:         if generator is not None:
  __pyx_t_7 = (__pyx_v_generator != Py_None);
  __pyx_t_8 = (__pyx_t_7 != 0);
  if (__pyx_t_8) {
/* … */
  }
+0938:             if intervention_fun is None:
    __pyx_t_8 = (__pyx_v_intervention_fun == Py_None);
    __pyx_t_7 = (__pyx_t_8 != 0);
    if (__pyx_t_7) {
/* … */
      goto __pyx_L6;
    }
+0939:                 self.contactMatrix = generator.constant_contactMatrix(**map_control_params_dict)
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_constant_contactMatrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 939, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (unlikely(__pyx_v_map_control_params_dict == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
        __PYX_ERR(0, 939, __pyx_L1_error)
      }
      if (likely(PyDict_CheckExact(__pyx_v_map_control_params_dict))) {
        __pyx_t_3 = PyDict_Copy(__pyx_v_map_control_params_dict); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 939, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      } else {
        __pyx_t_3 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_map_control_params_dict, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 939, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 939, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GIVEREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_v_self->contactMatrix);
      __Pyx_DECREF(__pyx_v_self->contactMatrix);
      __pyx_v_self->contactMatrix = __pyx_t_5;
      __pyx_t_5 = 0;
 0940:             else:
+0941:                 self.contactMatrix = generator.intervention_custom_temporal(intervention_fun, **map_control_params_dict)
    /*else*/ {
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_intervention_custom_temporal); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 941, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 941, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_v_intervention_fun);
      __Pyx_GIVEREF(__pyx_v_intervention_fun);
      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_intervention_fun);
      if (unlikely(__pyx_v_map_control_params_dict == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
        __PYX_ERR(0, 941, __pyx_L1_error)
      }
      if (likely(PyDict_CheckExact(__pyx_v_map_control_params_dict))) {
        __pyx_t_2 = PyDict_Copy(__pyx_v_map_control_params_dict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 941, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      } else {
        __pyx_t_2 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_map_control_params_dict, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 941, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 941, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_v_self->contactMatrix);
      __Pyx_DECREF(__pyx_v_self->contactMatrix);
      __pyx_v_self->contactMatrix = __pyx_t_1;
      __pyx_t_1 = 0;
    }
    __pyx_L6:;
 0942: 
+0943:         Nf = Tf+1
  __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_v_Tf, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 943, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_Nf = __pyx_t_1;
  __pyx_t_1 = 0;
 0944: 
+0945:         if tangent:
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_tangent); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 945, __pyx_L1_error)
  if (__pyx_t_7) {
/* … */
    goto __pyx_L7;
  }
+0946:             xm, full_cov = self.obtain_full_mean_cov_tangent_space(x0, Tf, Nf,
    __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_x0, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 946, __pyx_L1_error)
    __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_Tf); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 946, __pyx_L1_error)
    __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_Nf); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 946, __pyx_L1_error)
/* … */
    __pyx_t_13.__pyx_n = 1;
    __pyx_t_13.inter_steps = __pyx_t_12;
    __pyx_t_1 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->obtain_full_mean_cov_tangent_space(__pyx_v_self, __pyx_t_9, __pyx_t_10, __pyx_t_11, 0, &__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 946, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
    __pyx_t_9.memview = NULL;
    __pyx_t_9.data = NULL;
    if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
      PyObject* sequence = __pyx_t_1;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 946, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      #else
      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 946, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 946, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 946, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
      index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L8_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_2);
      index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L8_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(0, 946, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L9_unpacking_done;
      __pyx_L8_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 946, __pyx_L1_error)
      __pyx_L9_unpacking_done:;
    }
    __pyx_v_xm = __pyx_t_2;
    __pyx_t_2 = 0;
    __pyx_v_full_cov = __pyx_t_3;
    __pyx_t_3 = 0;
+0947:                                                                   inter_steps)
    __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_v_inter_steps); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 947, __pyx_L1_error)
 0948:         else:
+0949:             xm, full_cov = self.obtain_full_mean_cov(x0, Tf, Nf, inter_steps)
  /*else*/ {
    __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_x0, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 949, __pyx_L1_error)
    __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_Tf); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 949, __pyx_L1_error)
    __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_v_Nf); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 949, __pyx_L1_error)
    __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_inter_steps); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 949, __pyx_L1_error)
    __pyx_t_14.__pyx_n = 1;
    __pyx_t_14.inter_steps = __pyx_t_11;
    __pyx_t_1 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->obtain_full_mean_cov(__pyx_v_self, __pyx_t_9, __pyx_t_10, __pyx_t_12, 0, &__pyx_t_14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 949, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
    __pyx_t_9.memview = NULL;
    __pyx_t_9.data = NULL;
    if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
      PyObject* sequence = __pyx_t_1;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 949, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      #else
      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 949, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 949, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 949, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
      index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L10_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      index = 1; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L10_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_2);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(0, 949, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L11_unpacking_done;
      __pyx_L10_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 949, __pyx_L1_error)
      __pyx_L11_unpacking_done:;
    }
    __pyx_v_xm = __pyx_t_3;
    __pyx_t_3 = 0;
    __pyx_v_full_cov = __pyx_t_2;
    __pyx_t_2 = 0;
  }
  __pyx_L7:;
 0950: 
+0951:         return full_cov
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_full_cov);
  __pyx_r = __pyx_v_full_cov;
  goto __pyx_L0;
 0952: 
 0953: 
+0954:     def FIM(self, x, Tf, infer_result, contactMatrix=None, generator=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_37FIM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_36FIM[] = "\n        Computes the Fisher Information Matrix (FIM) for the MAP estimates of a stochastic SIR type model.\n\n        Parameters\n        ----------\n        x: 2d numpy.array\n            Observed trajectory (number of data points x (age groups * model classes))\n        Tf: float\n            Total time of the trajectory\n        infer_result: dict\n            Dictionary returned by latent_infer\n        contactMatrix: callable, optional\n            A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.\n            Either a contactMatrix or a generator must be specified.\n        generator: pyross.contactMatrix, optional\n            A pyross.contactMatrix object that generates a contact matrix function with specified lockdown\n            parameters.\n            Either a contactMatrix or a generator must be specified.\n        intervention_fun: callable, optional\n            The calling signature is `intervention_func(t, **kwargs)`,\n            where t is time and kwargs are other keyword arguments for the function.\n            The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.\n            The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.\n            If not set, assume intervention that's constant in time.\n            See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.\n        tangent: bool, optional\n            Set to True to use tangent space inference. Default is False.\n        eps: float or numpy.array, optional\n            Step size for numerical differentiation of the process mean and its full covariance matrix \n            with respect to the parameters. Must be either a scalar, or an array of length `len(infer_result['flat_params'])`. \n            If not specified, \n            \n            .. code-block:: python\n\n               eps = 100*infer_result['flat_params'] \n                     *nu""mpy.divide(numpy.spacing(infer_result['log_likelihood']),\n                     infer_result['log_likelihood'])**(0.25) \n\n            is used. It is recommended to use a step-size greater or equal to `eps`. \n            Decreasing the step size too small can result in round-off error.\n        inter_steps: int, optional\n            Intermediate steps for interpolation between observations for the deterministic forward Euler integration. \n            A higher number of intermediate steps will improve the accuracy of the result, but will make \n            computations slower. Setting `inter_steps=0` will fall back to the method accessible via `det_method` \n            for the deterministic integration. We have found that forward Euler is generally slower, but more stable \n            for derivatives with respect to parameters than the variable step size integrators used elsewhere in pyross. Default is 100. \n\n\n        Returns\n        -------\n        FIM: 2d numpy.array\n            The Fisher Information Matrix \n\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_37FIM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_infer_result = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_eps = 0;
  PyObject *__pyx_v_inter_steps = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("FIM (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_Tf,&__pyx_n_s_infer_result,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_tangent,&__pyx_n_s_eps,&__pyx_n_s_inter_steps,0};
    PyObject* values[9] = {0,0,0,0,0,0,0,0,0};
    values[3] = ((PyObject *)Py_None);
    values[4] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_36FIM(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_Tf, PyObject *__pyx_v_infer_result, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_tangent, PyObject *__pyx_v_eps, PyObject *__pyx_v_inter_steps) {
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct__FIM *__pyx_cur_scope;
  PyObject *__pyx_v_infer_result_loc = NULL;
  PyObject *__pyx_v_flat_params = NULL;
  PyObject *__pyx_v_key = NULL;
  PyObject *__pyx_v_mean = 0;
  PyObject *__pyx_v_covariance = 0;
  PyObject *__pyx_v_xx = NULL;
  PyObject *__pyx_v_fx = NULL;
  PyObject *__pyx_v_cov = NULL;
  PyObject *__pyx_v_invcov = NULL;
  Py_ssize_t __pyx_v_dim;
  PyObject *__pyx_v_FIM = NULL;
  PyObject *__pyx_v_dmu = NULL;
  PyObject *__pyx_v_dcov = NULL;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_t1 = NULL;
  PyObject *__pyx_v_t2 = NULL;
  PyObject *__pyx_v_rows = NULL;
  PyObject *__pyx_v_cols = NULL;
  PyObject *__pyx_v_j = NULL;
  PyObject *__pyx_v_i_lower = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("FIM", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pyross_9inference___pyx_scope_struct__FIM *)__pyx_tp_new_6pyross_9inference___pyx_scope_struct__FIM(__pyx_ptype_6pyross_9inference___pyx_scope_struct__FIM, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pyross_9inference___pyx_scope_struct__FIM *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 954, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_Tf = __pyx_v_Tf;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_Tf);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_Tf);
  __pyx_cur_scope->__pyx_v_contactMatrix = __pyx_v_contactMatrix;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_contactMatrix);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_contactMatrix);
  __pyx_cur_scope->__pyx_v_generator = __pyx_v_generator;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_generator);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_generator);
  __pyx_cur_scope->__pyx_v_intervention_fun = __pyx_v_intervention_fun;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_intervention_fun);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_intervention_fun);
  __pyx_cur_scope->__pyx_v_tangent = __pyx_v_tangent;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_tangent);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_tangent);
  __pyx_cur_scope->__pyx_v_inter_steps = __pyx_v_inter_steps;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_inter_steps);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_inter_steps);
  __Pyx_INCREF(__pyx_v_eps);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("pyross.inference.SIR_type.FIM", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_infer_result_loc);
  __Pyx_XDECREF(__pyx_v_flat_params);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_mean);
  __Pyx_XDECREF(__pyx_v_covariance);
  __Pyx_XDECREF(__pyx_v_xx);
  __Pyx_XDECREF(__pyx_v_fx);
  __Pyx_XDECREF(__pyx_v_cov);
  __Pyx_XDECREF(__pyx_v_invcov);
  __Pyx_XDECREF(__pyx_v_FIM);
  __Pyx_XDECREF(__pyx_v_dmu);
  __Pyx_XDECREF(__pyx_v_dcov);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_t1);
  __Pyx_XDECREF(__pyx_v_t2);
  __Pyx_XDECREF(__pyx_v_rows);
  __Pyx_XDECREF(__pyx_v_cols);
  __Pyx_XDECREF(__pyx_v_j);
  __Pyx_XDECREF(__pyx_v_i_lower);
  __Pyx_XDECREF(__pyx_v_eps);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_obj_6pyross_9inference___pyx_scope_struct__FIM {
  PyObject_HEAD
  PyObject *__pyx_v_Tf;
  PyObject *__pyx_v_contactMatrix;
  PyObject *__pyx_v_generator;
  PyObject *__pyx_v_inter_steps;
  PyObject *__pyx_v_intervention_fun;
  PyObject *__pyx_v_kwargs;
  struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self;
  PyObject *__pyx_v_tangent;
  PyObject *__pyx_v_x0;
};

+0955:             intervention_fun=None, tangent=False, eps=None, inter_steps=100):
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_False);
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)__pyx_int_100);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("FIM", 0, 3, 9, 1); __PYX_ERR(0, 954, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_infer_result)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("FIM", 0, 3, 9, 2); __PYX_ERR(0, 954, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[8] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "FIM") < 0)) __PYX_ERR(0, 954, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_x = values[0];
    __pyx_v_Tf = values[1];
    __pyx_v_infer_result = values[2];
    __pyx_v_contactMatrix = values[3];
    __pyx_v_generator = values[4];
    __pyx_v_intervention_fun = values[5];
    __pyx_v_tangent = values[6];
    __pyx_v_eps = values[7];
    __pyx_v_inter_steps = values[8];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("FIM", 0, 3, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 954, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.FIM", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_36FIM(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_x, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_eps, __pyx_v_inter_steps);
 0956:         """
 0957:         Computes the Fisher Information Matrix (FIM) for the MAP estimates of a stochastic SIR type model.
 0958: 
 0959:         Parameters
 0960:         ----------
 0961:         x: 2d numpy.array
 0962:             Observed trajectory (number of data points x (age groups * model classes))
 0963:         Tf: float
 0964:             Total time of the trajectory
 0965:         infer_result: dict
 0966:             Dictionary returned by latent_infer
 0967:         contactMatrix: callable, optional
 0968:             A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.
 0969:             Either a contactMatrix or a generator must be specified.
 0970:         generator: pyross.contactMatrix, optional
 0971:             A pyross.contactMatrix object that generates a contact matrix function with specified lockdown
 0972:             parameters.
 0973:             Either a contactMatrix or a generator must be specified.
 0974:         intervention_fun: callable, optional
 0975:             The calling signature is `intervention_func(t, **kwargs)`,
 0976:             where t is time and kwargs are other keyword arguments for the function.
 0977:             The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.
 0978:             The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.
 0979:             If not set, assume intervention that's constant in time.
 0980:             See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.
 0981:         tangent: bool, optional
 0982:             Set to True to use tangent space inference. Default is False.
 0983:         eps: float or numpy.array, optional
 0984:             Step size for numerical differentiation of the process mean and its full covariance matrix 
 0985:             with respect to the parameters. Must be either a scalar, or an array of length `len(infer_result['flat_params'])`. 
 0986:             If not specified, 
 0987:             
 0988:             .. code-block:: python
 0989: 
 0990:                eps = 100*infer_result['flat_params'] 
 0991:                      *numpy.divide(numpy.spacing(infer_result['log_likelihood']),
 0992:                      infer_result['log_likelihood'])**(0.25) 
 0993: 
 0994:             is used. It is recommended to use a step-size greater or equal to `eps`. 
 0995:             Decreasing the step size too small can result in round-off error.
 0996:         inter_steps: int, optional
 0997:             Intermediate steps for interpolation between observations for the deterministic forward Euler integration. 
 0998:             A higher number of intermediate steps will improve the accuracy of the result, but will make 
 0999:             computations slower. Setting `inter_steps=0` will fall back to the method accessible via `det_method` 
 1000:             for the deterministic integration. We have found that forward Euler is generally slower, but more stable 
 1001:             for derivatives with respect to parameters than the variable step size integrators used elsewhere in pyross. Default is 100. 
 1002: 
 1003: 
 1004:         Returns
 1005:         -------
 1006:         FIM: 2d numpy.array
 1007:             The Fisher Information Matrix 
 1008: 
 1009:         """
 1010: 
 1011: 
 1012: 
 1013:         # Sanity checks of the inputs
+1014:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1014, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_contactMatrix, __pyx_cur_scope->__pyx_v_generator, __pyx_cur_scope->__pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1014, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_contactMatrix, __pyx_cur_scope->__pyx_v_generator, __pyx_cur_scope->__pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1014, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1014, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_cur_scope->__pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_cur_scope->__pyx_v_generator);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_cur_scope->__pyx_v_intervention_fun);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1014, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1015:         infer_result_loc = infer_result.copy()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_infer_result, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1015, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1015, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_infer_result_loc = __pyx_t_1;
  __pyx_t_1 = 0;
 1016:         # backwards compatibility
+1017:         if 'flat_map' in infer_result_loc:
  __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_flat_map, __pyx_v_infer_result_loc, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1017, __pyx_L1_error)
  __pyx_t_7 = (__pyx_t_6 != 0);
  if (__pyx_t_7) {
/* … */
  }
+1018:             infer_result_loc['flat_params'] = infer_result_loc.pop('flat_map')
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_infer_result_loc, __pyx_n_s_pop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1018, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_n_u_flat_map) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_u_flat_map);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1018, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_infer_result_loc, __pyx_n_u_flat_params, __pyx_t_1) < 0)) __PYX_ERR(0, 1018, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1019: 
+1020:         flat_params = np.copy(infer_result_loc['flat_params'])
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1020, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1020, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result_loc, __pyx_n_u_flat_params); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1020, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1020, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_flat_params = __pyx_t_1;
  __pyx_t_1 = 0;
 1021: 
+1022:         kwargs = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1022, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_kwargs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+1023:         for key in ['param_keys', 'param_guess_range', 'is_scale_parameter',
  __pyx_t_1 = __pyx_tuple__9; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0;
  for (;;) {
    if (__pyx_t_8 >= 4) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1023, __pyx_L1_error)
    #else
    __pyx_t_5 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1023, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_key, ((PyObject*)__pyx_t_5));
    __pyx_t_5 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple__9 = PyTuple_Pack(4, __pyx_n_u_param_keys, __pyx_n_u_param_guess_range, __pyx_n_u_is_scale_parameter, __pyx_n_u_scaled_param_guesses); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 1023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__9);
  __Pyx_GIVEREF(__pyx_tuple__9);
 1024:                     'scaled_param_guesses']:
+1025:             kwargs[key] = infer_result_loc[key]
    __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result_loc, __pyx_v_key); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1025, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_kwargs, __pyx_v_key, __pyx_t_5) < 0)) __PYX_ERR(0, 1025, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 1026: 
+1027:         x0 = x[0]
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_x, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1027, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_x0 = __pyx_t_1;
  __pyx_t_1 = 0;
 1028: 
+1029:         def mean(y):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_3FIM_1mean(PyObject *__pyx_self, PyObject *__pyx_v_y); /*proto*/
static PyMethodDef __pyx_mdef_6pyross_9inference_8SIR_type_3FIM_1mean = {"mean", (PyCFunction)__pyx_pw_6pyross_9inference_8SIR_type_3FIM_1mean, METH_O, 0};
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_3FIM_1mean(PyObject *__pyx_self, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mean (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_3FIM_mean(__pyx_self, ((PyObject *)__pyx_v_y));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_3FIM_mean(PyObject *__pyx_self, PyObject *__pyx_v_y) {
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct__FIM *__pyx_cur_scope;
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct__FIM *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mean", 0);
  __pyx_outer_scope = (struct __pyx_obj_6pyross_9inference___pyx_scope_struct__FIM *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.FIM.mean", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__10 = PyTuple_Pack(1, __pyx_n_s_y); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 1029, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__10);
  __Pyx_GIVEREF(__pyx_tuple__10);
/* … */
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6pyross_9inference_8SIR_type_3FIM_1mean, 0, __pyx_n_s_FIM_locals_mean, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pyross_inference, __pyx_d, ((PyObject *)__pyx_codeobj__11)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1029, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_mean = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_codeobj__11 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__10, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyross_inference_pyx, __pyx_n_s_mean_2, 1029, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__11)) __PYX_ERR(0, 1029, __pyx_L1_error)
+1030:             return self._mean(y, contactMatrix=contactMatrix,
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 1030, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_mean); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1030, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1030, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_y);
  __Pyx_GIVEREF(__pyx_v_y);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1030, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(!__pyx_cur_scope->__pyx_v_contactMatrix)) { __Pyx_RaiseClosureNameError("contactMatrix"); __PYX_ERR(0, 1030, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_contactMatrix, __pyx_cur_scope->__pyx_v_contactMatrix) < 0) __PYX_ERR(0, 1030, __pyx_L1_error)
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1030, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
+1031:                                       generator=generator,
  if (unlikely(!__pyx_cur_scope->__pyx_v_generator)) { __Pyx_RaiseClosureNameError("generator"); __PYX_ERR(0, 1031, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_generator, __pyx_cur_scope->__pyx_v_generator) < 0) __PYX_ERR(0, 1030, __pyx_L1_error)
+1032:                               intervention_fun=intervention_fun, x0=x0,
  if (unlikely(!__pyx_cur_scope->__pyx_v_intervention_fun)) { __Pyx_RaiseClosureNameError("intervention_fun"); __PYX_ERR(0, 1032, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_intervention_fun, __pyx_cur_scope->__pyx_v_intervention_fun) < 0) __PYX_ERR(0, 1030, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_v_x0)) { __Pyx_RaiseClosureNameError("x0"); __PYX_ERR(0, 1032, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_x0, __pyx_cur_scope->__pyx_v_x0) < 0) __PYX_ERR(0, 1030, __pyx_L1_error)
+1033:                               Tf=Tf, inter_steps=inter_steps,
  if (unlikely(!__pyx_cur_scope->__pyx_v_Tf)) { __Pyx_RaiseClosureNameError("Tf"); __PYX_ERR(0, 1033, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_Tf, __pyx_cur_scope->__pyx_v_Tf) < 0) __PYX_ERR(0, 1030, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_v_inter_steps)) { __Pyx_RaiseClosureNameError("inter_steps"); __PYX_ERR(0, 1033, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_inter_steps, __pyx_cur_scope->__pyx_v_inter_steps) < 0) __PYX_ERR(0, 1030, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_4;
  __pyx_t_4 = 0;
+1034:                               **kwargs)
  if (unlikely(!__pyx_cur_scope->__pyx_v_kwargs)) { __Pyx_RaiseClosureNameError("kwargs"); __PYX_ERR(0, 1034, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_v_kwargs == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
    __PYX_ERR(0, 1034, __pyx_L1_error)
  }
  if (__Pyx_MergeKeywords(__pyx_t_3, __pyx_cur_scope->__pyx_v_kwargs) < 0) __PYX_ERR(0, 1034, __pyx_L1_error)
 1035: 
+1036:         def covariance(y):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_3FIM_3covariance(PyObject *__pyx_self, PyObject *__pyx_v_y); /*proto*/
static PyMethodDef __pyx_mdef_6pyross_9inference_8SIR_type_3FIM_3covariance = {"covariance", (PyCFunction)__pyx_pw_6pyross_9inference_8SIR_type_3FIM_3covariance, METH_O, 0};
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_3FIM_3covariance(PyObject *__pyx_self, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("covariance (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_3FIM_2covariance(__pyx_self, ((PyObject *)__pyx_v_y));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_3FIM_2covariance(PyObject *__pyx_self, PyObject *__pyx_v_y) {
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct__FIM *__pyx_cur_scope;
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct__FIM *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("covariance", 0);
  __pyx_outer_scope = (struct __pyx_obj_6pyross_9inference___pyx_scope_struct__FIM *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.FIM.covariance", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__12 = PyTuple_Pack(1, __pyx_n_s_y); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 1036, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__12);
  __Pyx_GIVEREF(__pyx_tuple__12);
/* … */
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6pyross_9inference_8SIR_type_3FIM_3covariance, 0, __pyx_n_s_FIM_locals_covariance, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pyross_inference, __pyx_d, ((PyObject *)__pyx_codeobj__13)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1036, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_covariance = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_codeobj__13 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__12, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyross_inference_pyx, __pyx_n_s_covariance, 1036, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__13)) __PYX_ERR(0, 1036, __pyx_L1_error)
+1037:             return self._cov(y, contactMatrix=contactMatrix,
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 1037, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_cov); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_y);
  __Pyx_GIVEREF(__pyx_v_y);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(!__pyx_cur_scope->__pyx_v_contactMatrix)) { __Pyx_RaiseClosureNameError("contactMatrix"); __PYX_ERR(0, 1037, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_contactMatrix, __pyx_cur_scope->__pyx_v_contactMatrix) < 0) __PYX_ERR(0, 1037, __pyx_L1_error)
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
+1038:                                      generator=generator,
  if (unlikely(!__pyx_cur_scope->__pyx_v_generator)) { __Pyx_RaiseClosureNameError("generator"); __PYX_ERR(0, 1038, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_generator, __pyx_cur_scope->__pyx_v_generator) < 0) __PYX_ERR(0, 1037, __pyx_L1_error)
+1039:                               intervention_fun=intervention_fun, x0=x0,
  if (unlikely(!__pyx_cur_scope->__pyx_v_intervention_fun)) { __Pyx_RaiseClosureNameError("intervention_fun"); __PYX_ERR(0, 1039, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_intervention_fun, __pyx_cur_scope->__pyx_v_intervention_fun) < 0) __PYX_ERR(0, 1037, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_v_x0)) { __Pyx_RaiseClosureNameError("x0"); __PYX_ERR(0, 1039, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_x0, __pyx_cur_scope->__pyx_v_x0) < 0) __PYX_ERR(0, 1037, __pyx_L1_error)
+1040:                               Tf=Tf, tangent=tangent, inter_steps=inter_steps,
  if (unlikely(!__pyx_cur_scope->__pyx_v_Tf)) { __Pyx_RaiseClosureNameError("Tf"); __PYX_ERR(0, 1040, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_Tf, __pyx_cur_scope->__pyx_v_Tf) < 0) __PYX_ERR(0, 1037, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_v_tangent)) { __Pyx_RaiseClosureNameError("tangent"); __PYX_ERR(0, 1040, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_tangent, __pyx_cur_scope->__pyx_v_tangent) < 0) __PYX_ERR(0, 1037, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_v_inter_steps)) { __Pyx_RaiseClosureNameError("inter_steps"); __PYX_ERR(0, 1040, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_inter_steps, __pyx_cur_scope->__pyx_v_inter_steps) < 0) __PYX_ERR(0, 1037, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_4;
  __pyx_t_4 = 0;
+1041:                               **kwargs)
  if (unlikely(!__pyx_cur_scope->__pyx_v_kwargs)) { __Pyx_RaiseClosureNameError("kwargs"); __PYX_ERR(0, 1041, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_v_kwargs == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
    __PYX_ERR(0, 1041, __pyx_L1_error)
  }
  if (__Pyx_MergeKeywords(__pyx_t_3, __pyx_cur_scope->__pyx_v_kwargs) < 0) __PYX_ERR(0, 1041, __pyx_L1_error)
 1042: 
+1043:         if np.all(eps == None):
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1043, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_all); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1043, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyObject_RichCompare(__pyx_v_eps, Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1043, __pyx_L1_error)
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1043, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1043, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_7) {
/* … */
    goto __pyx_L6;
  }
+1044:             xx = infer_result_loc['flat_params']
    __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result_loc, __pyx_n_u_flat_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1044, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_xx = __pyx_t_1;
    __pyx_t_1 = 0;
+1045:             fx = abs(infer_result_loc['log_likelihood'])
    __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result_loc, __pyx_n_u_log_likelihood); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1045, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyNumber_Absolute(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1045, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_fx = __pyx_t_2;
    __pyx_t_2 = 0;
+1046:             eps = 100 * xx * np.divide(np.spacing(fx),fx)**(0.25)
    __pyx_t_2 = PyNumber_Multiply(__pyx_int_100, __pyx_v_xx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1046, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1046, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_divide); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1046, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1046, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_spacing); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1046, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_5 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_9, __pyx_v_fx) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_fx);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1046, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_4 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_5, __pyx_v_fx};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1046, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_5, __pyx_v_fx};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1046, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    {
      __pyx_t_9 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1046, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (__pyx_t_10) {
        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_10); __pyx_t_10 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_4, __pyx_t_5);
      __Pyx_INCREF(__pyx_v_fx);
      __Pyx_GIVEREF(__pyx_v_fx);
      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_4, __pyx_v_fx);
      __pyx_t_5 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1046, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyNumber_Power(__pyx_t_1, __pyx_float_0_25, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1046, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1046, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_eps, __pyx_t_1);
    __pyx_t_1 = 0;
 1047:             #eps = 10.*np.spacing(flat_params)**np.divide(1,3)
+1048:         elif np.isscalar(eps):
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1048, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_isscalar); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1048, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_eps) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_eps);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1048, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1048, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_7) {
/* … */
  }
  __pyx_L6:;
+1049:             eps = np.repeat(eps, repeats=len(flat_params))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1049, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_repeat); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1049, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1049, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_eps);
    __Pyx_GIVEREF(__pyx_v_eps);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_eps);
    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1049, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = PyObject_Length(__pyx_v_flat_params); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1049, __pyx_L1_error)
    __pyx_t_9 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1049, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_repeats, __pyx_t_9) < 0) __PYX_ERR(0, 1049, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1049, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_eps, __pyx_t_9);
    __pyx_t_9 = 0;
+1050:         print('eps-vector used for differentiation: ', eps)
  __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1050, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_INCREF(__pyx_kp_u_eps_vector_used_for_differentiat);
  __Pyx_GIVEREF(__pyx_kp_u_eps_vector_used_for_differentiat);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_kp_u_eps_vector_used_for_differentiat);
  __Pyx_INCREF(__pyx_v_eps);
  __Pyx_GIVEREF(__pyx_v_eps);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_eps);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1050, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 1051: 
+1052:         cov = covariance(flat_params)
  __pyx_t_3 = __pyx_pf_6pyross_9inference_8SIR_type_3FIM_2covariance(__pyx_v_covariance, __pyx_v_flat_params); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1052, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_cov = __pyx_t_3;
  __pyx_t_3 = 0;
+1053:         invcov = np.linalg.inv(cov)
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_linalg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_inv); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_9, function);
    }
  }
  __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_1, __pyx_v_cov) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_cov);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_invcov = __pyx_t_3;
  __pyx_t_3 = 0;
 1054: 
+1055:         dim = len(flat_params)
  __pyx_t_8 = PyObject_Length(__pyx_v_flat_params); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1055, __pyx_L1_error)
  __pyx_v_dim = __pyx_t_8;
+1056:         FIM = np.empty((dim,dim))
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
  __pyx_t_9 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_FIM = __pyx_t_3;
  __pyx_t_3 = 0;
+1057:         dmu = []
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_dmu = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+1058:         dcov = []
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1058, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_dcov = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
 1059: 
+1060:         for i in range(dim):
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1060, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1060, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_8 = 0;
    __pyx_t_11 = NULL;
  } else {
    __pyx_t_8 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1060, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_11 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1060, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_11)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1060, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1060, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1060, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1060, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_11(__pyx_t_3);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1060, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1061:             dmu.append(pyross.utils.partial_derivative(mean, var=i, point=flat_params, dx=eps[i]))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyross); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1061, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1061, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_partial_derivative); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1061, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1061, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v_mean);
    __Pyx_GIVEREF(__pyx_v_mean);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_mean);
    __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1061, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_var, __pyx_v_i) < 0) __PYX_ERR(0, 1061, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_point, __pyx_v_flat_params) < 0) __PYX_ERR(0, 1061, __pyx_L1_error)
    __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_eps, __pyx_v_i); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1061, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dx, __pyx_t_9) < 0) __PYX_ERR(0, 1061, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1061, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_dmu, __pyx_t_9); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 1061, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+1062:             dcov.append(pyross.utils.partial_derivative(covariance,  var=i, point=flat_params, dx=eps[i]))
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_pyross); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1062, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_utils); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1062, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_partial_derivative); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1062, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1062, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_covariance);
    __Pyx_GIVEREF(__pyx_v_covariance);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_covariance);
    __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1062, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_var, __pyx_v_i) < 0) __PYX_ERR(0, 1062, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_point, __pyx_v_flat_params) < 0) __PYX_ERR(0, 1062, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_eps, __pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1062, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dx, __pyx_t_1) < 0) __PYX_ERR(0, 1062, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1062, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_dcov, __pyx_t_1); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 1062, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1063: 
+1064:         for i in range(dim):
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1064, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_8 = 0;
    __pyx_t_11 = NULL;
  } else {
    __pyx_t_8 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1064, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_11 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1064, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_11)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1064, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1064, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_11(__pyx_t_3);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1064, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1065:             t1 = dmu[i]@invcov@dmu[i]
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_dmu, __pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1065, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_1, __pyx_v_invcov); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1065, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_dmu, __pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1065, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1065, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_t1, __pyx_t_2);
    __pyx_t_2 = 0;
+1066:             t2 = np.multiply(0.5,np.trace(invcov@dcov[i]@invcov@dcov[i]))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multiply); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_trace); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_dcov, __pyx_v_i); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_13 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_invcov, __pyx_t_9); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_13, __pyx_v_invcov); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = __Pyx_PyObject_GetItem(__pyx_v_dcov, __pyx_v_i); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_14 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_9, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_1 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_13, __pyx_t_14) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_14);
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_4 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_float_0_5, __pyx_t_1};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1066, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_float_0_5, __pyx_t_1};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1066, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    {
      __pyx_t_14 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1066, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      if (__pyx_t_10) {
        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_10); __pyx_t_10 = NULL;
      }
      __Pyx_INCREF(__pyx_float_0_5);
      __Pyx_GIVEREF(__pyx_float_0_5);
      PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_4, __pyx_float_0_5);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_4, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_14, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1066, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF_SET(__pyx_v_t2, __pyx_t_2);
    __pyx_t_2 = 0;
+1067:             FIM[i,i] = t1 + t2
    __pyx_t_2 = PyNumber_Add(__pyx_v_t1, __pyx_v_t2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1067, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1067, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_i);
    __Pyx_INCREF(__pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_i);
    if (unlikely(PyObject_SetItem(__pyx_v_FIM, __pyx_t_5, __pyx_t_2) < 0)) __PYX_ERR(0, 1067, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 1068: 
+1069:         rows,cols = np.triu_indices(dim,1)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1069, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_triu_indices); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1069, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1069, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_14 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_2, __pyx_int_1};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1069, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_2, __pyx_int_1};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1069, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_1 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1069, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (__pyx_t_14) {
      __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_14); __pyx_t_14 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_4, __pyx_t_2);
    __Pyx_INCREF(__pyx_int_1);
    __Pyx_GIVEREF(__pyx_int_1);
    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_4, __pyx_int_1);
    __pyx_t_2 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1069, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1069, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_1);
    #else
    __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1069, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1069, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_2 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1069, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_15 = Py_TYPE(__pyx_t_2)->tp_iternext;
    index = 0; __pyx_t_5 = __pyx_t_15(__pyx_t_2); if (unlikely(!__pyx_t_5)) goto __pyx_L11_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    index = 1; __pyx_t_1 = __pyx_t_15(__pyx_t_2); if (unlikely(!__pyx_t_1)) goto __pyx_L11_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_2), 2) < 0) __PYX_ERR(0, 1069, __pyx_L1_error)
    __pyx_t_15 = NULL;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L12_unpacking_done;
    __pyx_L11_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_15 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1069, __pyx_L1_error)
    __pyx_L12_unpacking_done:;
  }
  __pyx_v_rows = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_cols = __pyx_t_1;
  __pyx_t_1 = 0;
 1070: 
+1071:         for i,j in zip(rows,cols):
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_rows);
  __Pyx_GIVEREF(__pyx_v_rows);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_rows);
  __Pyx_INCREF(__pyx_v_cols);
  __Pyx_GIVEREF(__pyx_v_cols);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_cols);
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_8 = 0;
    __pyx_t_11 = NULL;
  } else {
    __pyx_t_8 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1071, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_11 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1071, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_11)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1071, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1071, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1071, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1071, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_11(__pyx_t_3);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1071, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
      PyObject* sequence = __pyx_t_1;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 1071, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      #else
      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1071, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1071, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_14 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1071, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_15 = Py_TYPE(__pyx_t_14)->tp_iternext;
      index = 0; __pyx_t_5 = __pyx_t_15(__pyx_t_14); if (unlikely(!__pyx_t_5)) goto __pyx_L15_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      index = 1; __pyx_t_2 = __pyx_t_15(__pyx_t_14); if (unlikely(!__pyx_t_2)) goto __pyx_L15_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_2);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_14), 2) < 0) __PYX_ERR(0, 1071, __pyx_L1_error)
      __pyx_t_15 = NULL;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      goto __pyx_L16_unpacking_done;
      __pyx_L15_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_t_15 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 1071, __pyx_L1_error)
      __pyx_L16_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_2);
    __pyx_t_2 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1072:             t1 = dmu[i]@invcov@dmu[j]
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_dmu, __pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1072, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_1, __pyx_v_invcov); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1072, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_dmu, __pyx_v_j); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1072, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1072, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_t1, __pyx_t_5);
    __pyx_t_5 = 0;
+1073:             t2 = np.multiply(0.5,np.trace(invcov@dcov[i]@invcov@dcov[j]))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1073, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multiply); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1073, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1073, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_trace); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1073, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_v_dcov, __pyx_v_i); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1073, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_13 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_invcov, __pyx_t_14); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1073, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_14 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_13, __pyx_v_invcov); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1073, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = __Pyx_PyObject_GetItem(__pyx_v_dcov, __pyx_v_j); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1073, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_9 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_14, __pyx_t_13); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1073, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_1 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_13, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_9);
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1073, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_4 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_float_0_5, __pyx_t_1};
      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1073, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_float_0_5, __pyx_t_1};
      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1073, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    {
      __pyx_t_9 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1073, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (__pyx_t_10) {
        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_10); __pyx_t_10 = NULL;
      }
      __Pyx_INCREF(__pyx_float_0_5);
      __Pyx_GIVEREF(__pyx_float_0_5);
      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_4, __pyx_float_0_5);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_4, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1073, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF_SET(__pyx_v_t2, __pyx_t_5);
    __pyx_t_5 = 0;
+1074:             FIM[i,j] = t1 + t2
    __pyx_t_5 = PyNumber_Add(__pyx_v_t1, __pyx_v_t2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1074, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1074, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_i);
    __Pyx_INCREF(__pyx_v_j);
    __Pyx_GIVEREF(__pyx_v_j);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_j);
    if (unlikely(PyObject_SetItem(__pyx_v_FIM, __pyx_t_2, __pyx_t_5) < 0)) __PYX_ERR(0, 1074, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 1075: 
+1076:         i_lower = np.tril_indices(dim,-1)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_tril_indices); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_9 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_5, __pyx_int_neg_1};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1076, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_5, __pyx_int_neg_1};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1076, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  {
    __pyx_t_1 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1076, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (__pyx_t_9) {
      __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_9); __pyx_t_9 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_4, __pyx_t_5);
    __Pyx_INCREF(__pyx_int_neg_1);
    __Pyx_GIVEREF(__pyx_int_neg_1);
    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_4, __pyx_int_neg_1);
    __pyx_t_5 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1076, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_i_lower = __pyx_t_3;
  __pyx_t_3 = 0;
+1077:         FIM[i_lower] = FIM.T[i_lower]
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_FIM, __pyx_n_s_T); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_v_i_lower); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(PyObject_SetItem(__pyx_v_FIM, __pyx_v_i_lower, __pyx_t_2) < 0)) __PYX_ERR(0, 1077, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1078:         return FIM
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_FIM);
  __pyx_r = __pyx_v_FIM;
  goto __pyx_L0;
 1079: 
 1080: 
+1081:     def FIM_det(self, x, Tf, infer_result, contactMatrix=None, generator=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_39FIM_det(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_38FIM_det[] = "\n        Computes the Fisher Information Matrix (FIM) for the MAP estimates of a deterministic (ODE based, including a constant measurement error) SIR type model.\n\n        Parameters\n        ----------\n        x: 2d numpy.array\n            Observed trajectory (number of data points x (age groups * model classes))\n        Tf: float\n            Total time of the trajectory\n        infer_result: dict\n            Dictionary returned by latent_infer\n        contactMatrix: callable, optional\n            A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.\n            Either a contactMatrix or a generator must be specified.\n        generator: pyross.contactMatrix, optional\n            A pyross.contactMatrix object that generates a contact matrix function with specified lockdown\n            parameters.\n            Either a contactMatrix or a generator must be specified.\n        intervention_fun: callable, optional\n            The calling signature is `intervention_func(t, **kwargs)`,\n            where t is time and kwargs are other keyword arguments for the function.\n            The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.\n            The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.\n            If not set, assume intervention that's constant in time.\n            See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.\n        eps: float or numpy.array, optional\n            Step size for numerical differentiation of the process mean and its full covariance matrix with \n            respect to the parameters. Must be either a scalar, or an array of length `len(infer_result['flat_params'])`. \n            If not specified, \n            \n            .. code-block:: python\n\n               eps = 100*infer_result['flat_params'] \n                     *numpy.divide(numpy.spacing(infer_result['log_likelihood""']),\n                     infer_result['log_likelihood'])**(0.25) \n\n            is used. It is recommended to use a step-size greater or equal to `eps`. Decreasing the step size too small can result in round-off error.\n        measurement_error: float, optional\n            Standard deviation of measurements (uniform and independent Gaussian measurement error assumed). Default is 1e-2.\n        inter_steps: int, optional\n            Intermediate steps for interpolation between observations for the deterministic forward Euler integration. A higher number of intermediate steps will improve the accuracy of the result, but will make computations slower. Setting `inter_steps=0` will fall back to the method accessible via `det_method` for the deterministic integration. We have found that forward Euler is generally slower, but more stable for derivatives with respect to parameters than the variable step size integrators used elsewhere in pyross. Default is 100.\n        Returns\n        -------\n        FIM: 2d numpy.array\n            The Fisher Information Matrix\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_39FIM_det(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_infer_result = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_eps = 0;
  PyObject *__pyx_v_measurement_error = 0;
  PyObject *__pyx_v_inter_steps = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("FIM_det (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_Tf,&__pyx_n_s_infer_result,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_eps,&__pyx_n_s_measurement_error,&__pyx_n_s_inter_steps,0};
    PyObject* values[9] = {0,0,0,0,0,0,0,0,0};
    values[3] = ((PyObject *)Py_None);
    values[4] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_38FIM_det(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_Tf, PyObject *__pyx_v_infer_result, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_eps, PyObject *__pyx_v_measurement_error, PyObject *__pyx_v_inter_steps) {
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_1_FIM_det *__pyx_cur_scope;
  PyObject *__pyx_v_infer_result_loc = NULL;
  PyObject *__pyx_v_flat_params = NULL;
  PyObject *__pyx_v_key = NULL;
  PyObject *__pyx_v_mean = 0;
  PyObject *__pyx_v_xx = NULL;
  PyObject *__pyx_v_fx = NULL;
  PyObject *__pyx_v_sigma_sq = NULL;
  PyObject *__pyx_v_cov_diag = NULL;
  PyObject *__pyx_v_cov = NULL;
  PyObject *__pyx_v_invcov = NULL;
  Py_ssize_t __pyx_v_dim;
  PyObject *__pyx_v_FIM_det = NULL;
  PyObject *__pyx_v_dmu = NULL;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_rows = NULL;
  PyObject *__pyx_v_cols = NULL;
  PyObject *__pyx_v_j = NULL;
  PyObject *__pyx_v_i_lower = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("FIM_det", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pyross_9inference___pyx_scope_struct_1_FIM_det *)__pyx_tp_new_6pyross_9inference___pyx_scope_struct_1_FIM_det(__pyx_ptype_6pyross_9inference___pyx_scope_struct_1_FIM_det, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pyross_9inference___pyx_scope_struct_1_FIM_det *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1081, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_Tf = __pyx_v_Tf;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_Tf);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_Tf);
  __pyx_cur_scope->__pyx_v_contactMatrix = __pyx_v_contactMatrix;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_contactMatrix);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_contactMatrix);
  __pyx_cur_scope->__pyx_v_generator = __pyx_v_generator;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_generator);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_generator);
  __pyx_cur_scope->__pyx_v_intervention_fun = __pyx_v_intervention_fun;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_intervention_fun);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_intervention_fun);
  __pyx_cur_scope->__pyx_v_inter_steps = __pyx_v_inter_steps;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_inter_steps);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_inter_steps);
  __Pyx_INCREF(__pyx_v_eps);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("pyross.inference.SIR_type.FIM_det", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_infer_result_loc);
  __Pyx_XDECREF(__pyx_v_flat_params);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_mean);
  __Pyx_XDECREF(__pyx_v_xx);
  __Pyx_XDECREF(__pyx_v_fx);
  __Pyx_XDECREF(__pyx_v_sigma_sq);
  __Pyx_XDECREF(__pyx_v_cov_diag);
  __Pyx_XDECREF(__pyx_v_cov);
  __Pyx_XDECREF(__pyx_v_invcov);
  __Pyx_XDECREF(__pyx_v_FIM_det);
  __Pyx_XDECREF(__pyx_v_dmu);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_rows);
  __Pyx_XDECREF(__pyx_v_cols);
  __Pyx_XDECREF(__pyx_v_j);
  __Pyx_XDECREF(__pyx_v_i_lower);
  __Pyx_XDECREF(__pyx_v_eps);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_obj_6pyross_9inference___pyx_scope_struct_1_FIM_det {
  PyObject_HEAD
  PyObject *__pyx_v_Tf;
  PyObject *__pyx_v_contactMatrix;
  PyObject *__pyx_v_generator;
  PyObject *__pyx_v_inter_steps;
  PyObject *__pyx_v_intervention_fun;
  PyObject *__pyx_v_kwargs;
  struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self;
  PyObject *__pyx_v_x0;
};

+1082:                 intervention_fun=None, eps=None, measurement_error=1e-2,
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject *)__pyx_float_1eneg_2);
    values[8] = ((PyObject *)__pyx_int_100);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("FIM_det", 0, 3, 9, 1); __PYX_ERR(0, 1081, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_infer_result)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("FIM_det", 0, 3, 9, 2); __PYX_ERR(0, 1081, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_measurement_error);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[8] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "FIM_det") < 0)) __PYX_ERR(0, 1081, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_x = values[0];
    __pyx_v_Tf = values[1];
    __pyx_v_infer_result = values[2];
    __pyx_v_contactMatrix = values[3];
    __pyx_v_generator = values[4];
    __pyx_v_intervention_fun = values[5];
    __pyx_v_eps = values[6];
    __pyx_v_measurement_error = values[7];
    __pyx_v_inter_steps = values[8];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("FIM_det", 0, 3, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1081, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.FIM_det", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_38FIM_det(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_x, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_eps, __pyx_v_measurement_error, __pyx_v_inter_steps);
 1083:                 inter_steps=100):
 1084:         """
 1085:         Computes the Fisher Information Matrix (FIM) for the MAP estimates of a deterministic (ODE based, including a constant measurement error) SIR type model.
 1086: 
 1087:         Parameters
 1088:         ----------
 1089:         x: 2d numpy.array
 1090:             Observed trajectory (number of data points x (age groups * model classes))
 1091:         Tf: float
 1092:             Total time of the trajectory
 1093:         infer_result: dict
 1094:             Dictionary returned by latent_infer
 1095:         contactMatrix: callable, optional
 1096:             A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.
 1097:             Either a contactMatrix or a generator must be specified.
 1098:         generator: pyross.contactMatrix, optional
 1099:             A pyross.contactMatrix object that generates a contact matrix function with specified lockdown
 1100:             parameters.
 1101:             Either a contactMatrix or a generator must be specified.
 1102:         intervention_fun: callable, optional
 1103:             The calling signature is `intervention_func(t, **kwargs)`,
 1104:             where t is time and kwargs are other keyword arguments for the function.
 1105:             The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.
 1106:             The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.
 1107:             If not set, assume intervention that's constant in time.
 1108:             See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.
 1109:         eps: float or numpy.array, optional
 1110:             Step size for numerical differentiation of the process mean and its full covariance matrix with 
 1111:             respect to the parameters. Must be either a scalar, or an array of length `len(infer_result['flat_params'])`. 
 1112:             If not specified, 
 1113:             
 1114:             .. code-block:: python
 1115: 
 1116:                eps = 100*infer_result['flat_params'] 
 1117:                      *numpy.divide(numpy.spacing(infer_result['log_likelihood']),
 1118:                      infer_result['log_likelihood'])**(0.25) 
 1119: 
 1120:             is used. It is recommended to use a step-size greater or equal to `eps`. Decreasing the step size too small can result in round-off error.
 1121:         measurement_error: float, optional
 1122:             Standard deviation of measurements (uniform and independent Gaussian measurement error assumed). Default is 1e-2.
 1123:         inter_steps: int, optional
 1124:             Intermediate steps for interpolation between observations for the deterministic forward Euler integration. A higher number of intermediate steps will improve the accuracy of the result, but will make computations slower. Setting `inter_steps=0` will fall back to the method accessible via `det_method` for the deterministic integration. We have found that forward Euler is generally slower, but more stable for derivatives with respect to parameters than the variable step size integrators used elsewhere in pyross. Default is 100.
 1125:         Returns
 1126:         -------
 1127:         FIM: 2d numpy.array
 1128:             The Fisher Information Matrix
 1129:         """
 1130:         # Sanity checks of the inputs
+1131:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_contactMatrix, __pyx_cur_scope->__pyx_v_generator, __pyx_cur_scope->__pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1131, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_contactMatrix, __pyx_cur_scope->__pyx_v_generator, __pyx_cur_scope->__pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1131, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_cur_scope->__pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_cur_scope->__pyx_v_generator);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_cur_scope->__pyx_v_intervention_fun);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1132: 
+1133:         infer_result_loc = infer_result.copy()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_infer_result, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1133, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1133, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_infer_result_loc = __pyx_t_1;
  __pyx_t_1 = 0;
 1134:         # backwards compatibility
+1135:         if 'flat_map' in infer_result_loc:
  __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_flat_map, __pyx_v_infer_result_loc, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1135, __pyx_L1_error)
  __pyx_t_7 = (__pyx_t_6 != 0);
  if (__pyx_t_7) {
/* … */
  }
+1136:             infer_result_loc['flat_params'] = infer_result_loc.pop('flat_map')
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_infer_result_loc, __pyx_n_s_pop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1136, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_n_u_flat_map) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_u_flat_map);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1136, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_infer_result_loc, __pyx_n_u_flat_params, __pyx_t_1) < 0)) __PYX_ERR(0, 1136, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1137: 
+1138:         flat_params = np.copy(infer_result_loc['flat_params'])
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result_loc, __pyx_n_u_flat_params); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_flat_params = __pyx_t_1;
  __pyx_t_1 = 0;
+1139:         kwargs = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_kwargs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+1140:         for key in ['param_keys', 'param_guess_range', 'is_scale_parameter',
  __pyx_t_1 = __pyx_tuple__9; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0;
  for (;;) {
    if (__pyx_t_8 >= 4) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1140, __pyx_L1_error)
    #else
    __pyx_t_5 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1140, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_key, ((PyObject*)__pyx_t_5));
    __pyx_t_5 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1141:                     'scaled_param_guesses']:
+1142:             kwargs[key] = infer_result_loc[key]
    __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result_loc, __pyx_v_key); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1142, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_kwargs, __pyx_v_key, __pyx_t_5) < 0)) __PYX_ERR(0, 1142, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 1143: 
+1144:         x0 = x[0]
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_x, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_x0 = __pyx_t_1;
  __pyx_t_1 = 0;
 1145: 
+1146:         def mean(y):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_7FIM_det_1mean(PyObject *__pyx_self, PyObject *__pyx_v_y); /*proto*/
static PyMethodDef __pyx_mdef_6pyross_9inference_8SIR_type_7FIM_det_1mean = {"mean", (PyCFunction)__pyx_pw_6pyross_9inference_8SIR_type_7FIM_det_1mean, METH_O, 0};
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_7FIM_det_1mean(PyObject *__pyx_self, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mean (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_7FIM_det_mean(__pyx_self, ((PyObject *)__pyx_v_y));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_7FIM_det_mean(PyObject *__pyx_self, PyObject *__pyx_v_y) {
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_1_FIM_det *__pyx_cur_scope;
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_1_FIM_det *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mean", 0);
  __pyx_outer_scope = (struct __pyx_obj_6pyross_9inference___pyx_scope_struct_1_FIM_det *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.FIM_det.mean", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_n_s_y); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 1146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__14);
  __Pyx_GIVEREF(__pyx_tuple__14);
/* … */
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6pyross_9inference_8SIR_type_7FIM_det_1mean, 0, __pyx_n_s_FIM_det_locals_mean, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pyross_inference, __pyx_d, ((PyObject *)__pyx_codeobj__15)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_mean = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_codeobj__15 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyross_inference_pyx, __pyx_n_s_mean_2, 1146, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__15)) __PYX_ERR(0, 1146, __pyx_L1_error)
+1147:             return self._mean(y, contactMatrix=contactMatrix,
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 1147, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_mean); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_y);
  __Pyx_GIVEREF(__pyx_v_y);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(!__pyx_cur_scope->__pyx_v_contactMatrix)) { __Pyx_RaiseClosureNameError("contactMatrix"); __PYX_ERR(0, 1147, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_contactMatrix, __pyx_cur_scope->__pyx_v_contactMatrix) < 0) __PYX_ERR(0, 1147, __pyx_L1_error)
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
+1148:                                       generator=generator,
  if (unlikely(!__pyx_cur_scope->__pyx_v_generator)) { __Pyx_RaiseClosureNameError("generator"); __PYX_ERR(0, 1148, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_generator, __pyx_cur_scope->__pyx_v_generator) < 0) __PYX_ERR(0, 1147, __pyx_L1_error)
+1149:                               intervention_fun=intervention_fun, x0=x0,
  if (unlikely(!__pyx_cur_scope->__pyx_v_intervention_fun)) { __Pyx_RaiseClosureNameError("intervention_fun"); __PYX_ERR(0, 1149, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_intervention_fun, __pyx_cur_scope->__pyx_v_intervention_fun) < 0) __PYX_ERR(0, 1147, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_v_x0)) { __Pyx_RaiseClosureNameError("x0"); __PYX_ERR(0, 1149, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_x0, __pyx_cur_scope->__pyx_v_x0) < 0) __PYX_ERR(0, 1147, __pyx_L1_error)
+1150:                               Tf=Tf, inter_steps=inter_steps,
  if (unlikely(!__pyx_cur_scope->__pyx_v_Tf)) { __Pyx_RaiseClosureNameError("Tf"); __PYX_ERR(0, 1150, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_Tf, __pyx_cur_scope->__pyx_v_Tf) < 0) __PYX_ERR(0, 1147, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_v_inter_steps)) { __Pyx_RaiseClosureNameError("inter_steps"); __PYX_ERR(0, 1150, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_inter_steps, __pyx_cur_scope->__pyx_v_inter_steps) < 0) __PYX_ERR(0, 1147, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_4;
  __pyx_t_4 = 0;
+1151:                               **kwargs)
  if (unlikely(!__pyx_cur_scope->__pyx_v_kwargs)) { __Pyx_RaiseClosureNameError("kwargs"); __PYX_ERR(0, 1151, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_v_kwargs == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
    __PYX_ERR(0, 1151, __pyx_L1_error)
  }
  if (__Pyx_MergeKeywords(__pyx_t_3, __pyx_cur_scope->__pyx_v_kwargs) < 0) __PYX_ERR(0, 1151, __pyx_L1_error)
 1152: 
+1153:         if np.all(eps == None):
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_all); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyObject_RichCompare(__pyx_v_eps, Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1153, __pyx_L1_error)
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1153, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_7) {
/* … */
    goto __pyx_L6;
  }
+1154:             xx = infer_result_loc['flat_params']
    __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result_loc, __pyx_n_u_flat_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1154, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_xx = __pyx_t_1;
    __pyx_t_1 = 0;
+1155:             fx = abs(infer_result_loc['log_likelihood'])
    __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result_loc, __pyx_n_u_log_likelihood); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1155, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyNumber_Absolute(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1155, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_fx = __pyx_t_2;
    __pyx_t_2 = 0;
+1156:             eps = 100 * xx * np.divide(np.spacing(fx),fx)**(0.25)
    __pyx_t_2 = PyNumber_Multiply(__pyx_int_100, __pyx_v_xx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_divide); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_spacing); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_5 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_9, __pyx_v_fx) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_fx);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_4 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_5, __pyx_v_fx};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1156, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_5, __pyx_v_fx};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1156, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    {
      __pyx_t_9 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1156, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (__pyx_t_10) {
        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_10); __pyx_t_10 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_4, __pyx_t_5);
      __Pyx_INCREF(__pyx_v_fx);
      __Pyx_GIVEREF(__pyx_v_fx);
      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_4, __pyx_v_fx);
      __pyx_t_5 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1156, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyNumber_Power(__pyx_t_1, __pyx_float_0_25, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_eps, __pyx_t_1);
    __pyx_t_1 = 0;
 1157:             #eps = 10.*np.spacing(flat_params)**np.divide(1,3)
+1158:         elif np.isscalar(eps):
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1158, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_isscalar); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1158, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_eps) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_eps);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1158, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1158, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_7) {
/* … */
  }
  __pyx_L6:;
+1159:             eps = np.repeat(eps, repeats=len(flat_params))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1159, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_repeat); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1159, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1159, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_eps);
    __Pyx_GIVEREF(__pyx_v_eps);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_eps);
    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1159, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = PyObject_Length(__pyx_v_flat_params); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1159, __pyx_L1_error)
    __pyx_t_9 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1159, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_repeats, __pyx_t_9) < 0) __PYX_ERR(0, 1159, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1159, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_eps, __pyx_t_9);
    __pyx_t_9 = 0;
+1160:         print('eps-vector used for differentiation: ', eps)
  __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_INCREF(__pyx_kp_u_eps_vector_used_for_differentiat);
  __Pyx_GIVEREF(__pyx_kp_u_eps_vector_used_for_differentiat);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_kp_u_eps_vector_used_for_differentiat);
  __Pyx_INCREF(__pyx_v_eps);
  __Pyx_GIVEREF(__pyx_v_eps);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_eps);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 1161: 
+1162:         sigma_sq = measurement_error*measurement_error
  __pyx_t_3 = PyNumber_Multiply(__pyx_v_measurement_error, __pyx_v_measurement_error); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1162, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_sigma_sq = __pyx_t_3;
  __pyx_t_3 = 0;
+1163:         cov_diag = np.repeat(sigma_sq, repeats=(int(self.dim)*(x.shape[0]-1)))
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_repeat); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_sigma_sq);
  __Pyx_GIVEREF(__pyx_v_sigma_sq);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_sigma_sq);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_cur_scope->__pyx_v_self->dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyInt_Type)), __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_SubtractObjC(__pyx_t_10, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = PyNumber_Multiply(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_repeats, __pyx_t_10) < 0) __PYX_ERR(0, 1163, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_cov_diag = __pyx_t_10;
  __pyx_t_10 = 0;
+1164:         cov = np.diag(cov_diag)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1164, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_diag); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1164, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_10 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_v_cov_diag) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_cov_diag);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1164, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_cov = __pyx_t_10;
  __pyx_t_10 = 0;
+1165:         invcov = np.linalg.inv(cov)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1165, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_linalg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1165, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_inv); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1165, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_10 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_v_cov) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_cov);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1165, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_invcov = __pyx_t_10;
  __pyx_t_10 = 0;
 1166: 
+1167:         dim = len(flat_params)
  __pyx_t_8 = PyObject_Length(__pyx_v_flat_params); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1167, __pyx_L1_error)
  __pyx_v_dim = __pyx_t_8;
+1168:         FIM_det = np.empty((dim,dim))
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_9);
  __pyx_t_3 = 0;
  __pyx_t_9 = 0;
  __pyx_t_9 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_10 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_9, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_FIM_det = __pyx_t_10;
  __pyx_t_10 = 0;
+1169:         dmu = []
  __pyx_t_10 = PyList_New(0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_v_dmu = ((PyObject*)__pyx_t_10);
  __pyx_t_10 = 0;
 1170: 
+1171:         for i in range(dim):
  __pyx_t_10 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1171, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1171, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_10 = __pyx_t_1; __Pyx_INCREF(__pyx_t_10); __pyx_t_8 = 0;
    __pyx_t_11 = NULL;
  } else {
    __pyx_t_8 = -1; __pyx_t_10 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1171, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1171, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_11)) {
      if (likely(PyList_CheckExact(__pyx_t_10))) {
        if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_10)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_10, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1171, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_10, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1171, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_10)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_10, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1171, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_10, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1171, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_11(__pyx_t_10);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1171, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+1172:             dmu.append(pyross.utils.partial_derivative(mean, var=i, point=flat_params, dx=eps[i]))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyross); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1172, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_utils); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1172, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_partial_derivative); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1172, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1172, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_mean);
    __Pyx_GIVEREF(__pyx_v_mean);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_mean);
    __pyx_t_9 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1172, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_var, __pyx_v_i) < 0) __PYX_ERR(0, 1172, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_point, __pyx_v_flat_params) < 0) __PYX_ERR(0, 1172, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_eps, __pyx_v_i); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1172, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dx, __pyx_t_3) < 0) __PYX_ERR(0, 1172, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1172, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_dmu, __pyx_t_3); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 1172, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 1173: 
+1174:         for i in range(dim):
  __pyx_t_10 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
    __pyx_t_10 = __pyx_t_3; __Pyx_INCREF(__pyx_t_10); __pyx_t_8 = 0;
    __pyx_t_11 = NULL;
  } else {
    __pyx_t_8 = -1; __pyx_t_10 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1174, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1174, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  for (;;) {
    if (likely(!__pyx_t_11)) {
      if (likely(PyList_CheckExact(__pyx_t_10))) {
        if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_10)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_10, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1174, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_10, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1174, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_10)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_10, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1174, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_10, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1174, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_11(__pyx_t_10);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1174, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+1175:             FIM_det[i,i] = dmu[i]@invcov@dmu[i]
    __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_dmu, __pyx_v_i); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1175, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_9 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_3, __pyx_v_invcov); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1175, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_dmu, __pyx_v_i); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1175, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_9, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1175, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1175, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_i);
    __Pyx_INCREF(__pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_i);
    if (unlikely(PyObject_SetItem(__pyx_v_FIM_det, __pyx_t_3, __pyx_t_2) < 0)) __PYX_ERR(0, 1175, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 1176: 
+1177:         rows,cols = np.triu_indices(dim,1)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_triu_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_9 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_2, __pyx_int_1};
    __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1177, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_2, __pyx_int_1};
    __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1177, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_1 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1177, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (__pyx_t_9) {
      __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_9); __pyx_t_9 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_4, __pyx_t_2);
    __Pyx_INCREF(__pyx_int_1);
    __Pyx_GIVEREF(__pyx_int_1);
    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_4, __pyx_int_1);
    __pyx_t_2 = 0;
    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1177, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_10))) || (PyList_CheckExact(__pyx_t_10))) {
    PyObject* sequence = __pyx_t_10;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1177, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_1);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1177, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1177, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    #endif
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_2 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1177, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_13 = Py_TYPE(__pyx_t_2)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_13(__pyx_t_2); if (unlikely(!__pyx_t_3)) goto __pyx_L11_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_1 = __pyx_t_13(__pyx_t_2); if (unlikely(!__pyx_t_1)) goto __pyx_L11_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_2), 2) < 0) __PYX_ERR(0, 1177, __pyx_L1_error)
    __pyx_t_13 = NULL;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L12_unpacking_done;
    __pyx_L11_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_13 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1177, __pyx_L1_error)
    __pyx_L12_unpacking_done:;
  }
  __pyx_v_rows = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_cols = __pyx_t_1;
  __pyx_t_1 = 0;
 1178: 
+1179:         for i,j in zip(rows,cols):
  __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1179, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_INCREF(__pyx_v_rows);
  __Pyx_GIVEREF(__pyx_v_rows);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_rows);
  __Pyx_INCREF(__pyx_v_cols);
  __Pyx_GIVEREF(__pyx_v_cols);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_cols);
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_10 = __pyx_t_1; __Pyx_INCREF(__pyx_t_10); __pyx_t_8 = 0;
    __pyx_t_11 = NULL;
  } else {
    __pyx_t_8 = -1; __pyx_t_10 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1179, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1179, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_11)) {
      if (likely(PyList_CheckExact(__pyx_t_10))) {
        if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_10)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_10, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1179, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_10, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_10)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_10, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1179, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_10, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_11(__pyx_t_10);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1179, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
      PyObject* sequence = __pyx_t_1;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 1179, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      #else
      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1179, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1179, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_9 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1179, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_13 = Py_TYPE(__pyx_t_9)->tp_iternext;
      index = 0; __pyx_t_3 = __pyx_t_13(__pyx_t_9); if (unlikely(!__pyx_t_3)) goto __pyx_L15_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      index = 1; __pyx_t_2 = __pyx_t_13(__pyx_t_9); if (unlikely(!__pyx_t_2)) goto __pyx_L15_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_2);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_9), 2) < 0) __PYX_ERR(0, 1179, __pyx_L1_error)
      __pyx_t_13 = NULL;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      goto __pyx_L16_unpacking_done;
      __pyx_L15_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_13 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 1179, __pyx_L1_error)
      __pyx_L16_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_2);
    __pyx_t_2 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+1180:             FIM_det[i,j] = dmu[i]@invcov@dmu[j]
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_dmu, __pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1180, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_1, __pyx_v_invcov); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1180, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_dmu, __pyx_v_j); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1180, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1180, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1180, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_i);
    __Pyx_INCREF(__pyx_v_j);
    __Pyx_GIVEREF(__pyx_v_j);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_j);
    if (unlikely(PyObject_SetItem(__pyx_v_FIM_det, __pyx_t_1, __pyx_t_3) < 0)) __PYX_ERR(0, 1180, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 1181: 
+1182:         i_lower = np.tril_indices(dim,-1)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1182, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_tril_indices); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1182, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1182, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_3, __pyx_int_neg_1};
    __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1182, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_3, __pyx_int_neg_1};
    __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1182, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1182, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_4, __pyx_t_3);
    __Pyx_INCREF(__pyx_int_neg_1);
    __Pyx_GIVEREF(__pyx_int_neg_1);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_4, __pyx_int_neg_1);
    __pyx_t_3 = 0;
    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1182, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_i_lower = __pyx_t_10;
  __pyx_t_10 = 0;
+1183:         FIM_det[i_lower] = FIM_det.T[i_lower]
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_FIM_det, __pyx_n_s_T); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1183, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_10, __pyx_v_i_lower); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1183, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(PyObject_SetItem(__pyx_v_FIM_det, __pyx_v_i_lower, __pyx_t_1) < 0)) __PYX_ERR(0, 1183, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1184:         return FIM_det
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_FIM_det);
  __pyx_r = __pyx_v_FIM_det;
  goto __pyx_L0;
 1185: 
 1186: 
+1187:     def hessian(self, x, Tf, infer_result, contactMatrix=None, generator=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_41hessian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_40hessian[] = "\n        Computes the Hessian matrix for the MAP estimates of an SIR type model.\n\n        Parameters\n        ----------\n        x: 2d numpy.array\n            Observed trajectory (number of data points x (age groups * model classes))\n        Tf: float\n            Total time of the trajectory\n        infer_result: dict\n            Dictionary returned by latent_infer\n        contactMatrix: callable, optional\n            A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.\n            Either a contactMatrix or a generator must be specified.\n        generator: pyross.contactMatrix, optional\n            A pyross.contactMatrix object that generates a contact matrix function with specified lockdown\n            parameters.\n            Either a contactMatrix or a generator must be specified.\n        intervention_fun: callable, optional\n            The calling signature is `intervention_func(t, **kwargs)`,\n            where t is time and kwargs are other keyword arguments for the function.\n            The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.\n            The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.\n            If not set, assume intervention that's constant in time.\n            See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.\n        tangent: bool, optional\n            Set to True to use tangent space inference. Default is False.\n        eps: float or numpy.array, optional\n            Step size for finite differences computation of the hessian with respect to the parameters. \n            Must be either a scalar, or an array of length `len(infer_result['flat_params'])`. \n            If not specified,\n            \n            .. code-block:: python\n\n               eps = 100*infer_result['flat_params'] \n                     *numpy.divide(numpy.spacing(infer_result['log_likelihood']),""\n                     infer_result['log_likelihood'])**(0.25) \n\n            is used. For `fd_method=\"central\"` it is recommended to use a step-size greater or equal to `eps`. Decreasing the step size too small can result in round-off error.\n        fd_method: str, optional\n            The type of finite-difference scheme used to compute the hessian, supports \"forward\" and \"central\". Default is \"central\".\n        inter_steps: int, optional\n            Only used if `tangent=False`. Intermediate steps for interpolation between observations for the deterministic forward Euler integration. \n            A higher number of intermediate steps will improve the accuracy of the result, but will make computations slower. \n            Setting `inter_steps=0` will fall back to the method accessible via `det_method` for the deterministic integration. \n            We have found that forward Euler is generally slower, but sometimes more stable for derivatives with respect to parameters \n            than the variable step size integrators used elsewhere in pyross. Default is 0.\n        Returns\n        -------\n        hess: 2d numpy.array\n            The Hessian matrix\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_41hessian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_infer_result = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_eps = 0;
  PyObject *__pyx_v_fd_method = 0;
  PyObject *__pyx_v_inter_steps = 0;
  PyObject *__pyx_v_nprocesses = 0;
  PyObject *__pyx_v_basis = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hessian (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_Tf,&__pyx_n_s_infer_result,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_tangent,&__pyx_n_s_eps,&__pyx_n_s_fd_method,&__pyx_n_s_inter_steps,&__pyx_n_s_nprocesses,&__pyx_n_s_basis,0};
    PyObject* values[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
    values[3] = ((PyObject *)Py_None);
    values[4] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_40hessian(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_Tf, PyObject *__pyx_v_infer_result, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_tangent, PyObject *__pyx_v_eps, PyObject *__pyx_v_fd_method, PyObject *__pyx_v_inter_steps, PyObject *__pyx_v_nprocesses, PyObject *__pyx_v_basis) {
  PyObject *__pyx_v_flat_params = NULL;
  PyObject *__pyx_v_kwargs = NULL;
  PyObject *__pyx_v_key = NULL;
  PyObject *__pyx_v_xx = NULL;
  PyObject *__pyx_v_fx = NULL;
  PyObject *__pyx_v_hess = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("hessian", 0);
  __Pyx_INCREF(__pyx_v_eps);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pyross.inference.SIR_type.hessian", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_flat_params);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_xx);
  __Pyx_XDECREF(__pyx_v_fx);
  __Pyx_XDECREF(__pyx_v_hess);
  __Pyx_XDECREF(__pyx_v_eps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1188:                 intervention_fun=None, tangent=False, eps=None,
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_False);
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)__pyx_n_u_central);
    values[9] = ((PyObject *)__pyx_int_0);
    values[10] = ((PyObject *)__pyx_int_0);
+1189:                 fd_method="central", inter_steps=0, nprocesses=0, basis=None):
    values[11] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("hessian", 0, 3, 12, 1); __PYX_ERR(0, 1187, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_infer_result)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("hessian", 0, 3, 12, 2); __PYX_ERR(0, 1187, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fd_method);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nprocesses);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_basis);
          if (value) { values[11] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "hessian") < 0)) __PYX_ERR(0, 1187, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_x = values[0];
    __pyx_v_Tf = values[1];
    __pyx_v_infer_result = values[2];
    __pyx_v_contactMatrix = values[3];
    __pyx_v_generator = values[4];
    __pyx_v_intervention_fun = values[5];
    __pyx_v_tangent = values[6];
    __pyx_v_eps = values[7];
    __pyx_v_fd_method = values[8];
    __pyx_v_inter_steps = values[9];
    __pyx_v_nprocesses = values[10];
    __pyx_v_basis = values[11];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("hessian", 0, 3, 12, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1187, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.hessian", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_40hessian(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_x, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_eps, __pyx_v_fd_method, __pyx_v_inter_steps, __pyx_v_nprocesses, __pyx_v_basis);
 1190:         """
 1191:         Computes the Hessian matrix for the MAP estimates of an SIR type model.
 1192: 
 1193:         Parameters
 1194:         ----------
 1195:         x: 2d numpy.array
 1196:             Observed trajectory (number of data points x (age groups * model classes))
 1197:         Tf: float
 1198:             Total time of the trajectory
 1199:         infer_result: dict
 1200:             Dictionary returned by latent_infer
 1201:         contactMatrix: callable, optional
 1202:             A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.
 1203:             Either a contactMatrix or a generator must be specified.
 1204:         generator: pyross.contactMatrix, optional
 1205:             A pyross.contactMatrix object that generates a contact matrix function with specified lockdown
 1206:             parameters.
 1207:             Either a contactMatrix or a generator must be specified.
 1208:         intervention_fun: callable, optional
 1209:             The calling signature is `intervention_func(t, **kwargs)`,
 1210:             where t is time and kwargs are other keyword arguments for the function.
 1211:             The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.
 1212:             The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.
 1213:             If not set, assume intervention that's constant in time.
 1214:             See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.
 1215:         tangent: bool, optional
 1216:             Set to True to use tangent space inference. Default is False.
 1217:         eps: float or numpy.array, optional
 1218:             Step size for finite differences computation of the hessian with respect to the parameters. 
 1219:             Must be either a scalar, or an array of length `len(infer_result['flat_params'])`. 
 1220:             If not specified,
 1221:             
 1222:             .. code-block:: python
 1223: 
 1224:                eps = 100*infer_result['flat_params'] 
 1225:                      *numpy.divide(numpy.spacing(infer_result['log_likelihood']),
 1226:                      infer_result['log_likelihood'])**(0.25) 
 1227: 
 1228:             is used. For `fd_method="central"` it is recommended to use a step-size greater or equal to `eps`. Decreasing the step size too small can result in round-off error.
 1229:         fd_method: str, optional
 1230:             The type of finite-difference scheme used to compute the hessian, supports "forward" and "central". Default is "central".
 1231:         inter_steps: int, optional
 1232:             Only used if `tangent=False`. Intermediate steps for interpolation between observations for the deterministic forward Euler integration. 
 1233:             A higher number of intermediate steps will improve the accuracy of the result, but will make computations slower. 
 1234:             Setting `inter_steps=0` will fall back to the method accessible via `det_method` for the deterministic integration. 
 1235:             We have found that forward Euler is generally slower, but sometimes more stable for derivatives with respect to parameters 
 1236:             than the variable step size integrators used elsewhere in pyross. Default is 0.
 1237:         Returns
 1238:         -------
 1239:         hess: 2d numpy.array
 1240:             The Hessian matrix
 1241:         """
 1242:         # Sanity checks of the inputs
+1243:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1243, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1243, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1243, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1243, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_intervention_fun);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1243, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1244: 
+1245:         flat_params = np.copy(infer_result['flat_params'])
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_n_u_flat_params); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_flat_params = __pyx_t_1;
  __pyx_t_1 = 0;
 1246: 
+1247:         kwargs = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_kwargs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+1248:         kwargs['x'] = x
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_x, __pyx_v_x) < 0)) __PYX_ERR(0, 1248, __pyx_L1_error)
+1249:         kwargs['Tf'] = Tf
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_Tf, __pyx_v_Tf) < 0)) __PYX_ERR(0, 1249, __pyx_L1_error)
+1250:         kwargs['tangent'] = tangent
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_tangent, __pyx_v_tangent) < 0)) __PYX_ERR(0, 1250, __pyx_L1_error)
+1251:         for key in ['is_scale_parameter',
  __pyx_t_1 = __pyx_tuple__16; __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0;
  for (;;) {
    if (__pyx_t_6 >= 3) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1251, __pyx_L1_error)
    #else
    __pyx_t_5 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1251, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_key, ((PyObject*)__pyx_t_5));
    __pyx_t_5 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple__16 = PyTuple_Pack(3, __pyx_n_u_is_scale_parameter, __pyx_n_u_scaled_param_guesses, __pyx_n_u_prior); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 1251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__16);
  __Pyx_GIVEREF(__pyx_tuple__16);
 1252:                     'scaled_param_guesses', 'prior']:
+1253:             kwargs[key] = infer_result[key]
    __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_v_key); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_v_key, __pyx_t_5) < 0)) __PYX_ERR(0, 1253, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 1254: 
+1255:         kwargs['keys'] = infer_result['param_keys']
  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_n_u_param_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_keys, __pyx_t_1) < 0)) __PYX_ERR(0, 1255, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1256:         kwargs['flat_guess_range'] = infer_result['param_guess_range']
  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_n_u_param_guess_range); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_flat_guess_range, __pyx_t_1) < 0)) __PYX_ERR(0, 1256, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1257:         kwargs['generator'] = generator
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_generator, __pyx_v_generator) < 0)) __PYX_ERR(0, 1257, __pyx_L1_error)
+1258:         kwargs['intervention_fun'] = intervention_fun
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_intervention_fun, __pyx_v_intervention_fun) < 0)) __PYX_ERR(0, 1258, __pyx_L1_error)
+1259:         kwargs['inter_steps'] = inter_steps
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_inter_steps, __pyx_v_inter_steps) < 0)) __PYX_ERR(0, 1259, __pyx_L1_error)
 1260: 
+1261:         if np.all(eps == None):
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_all); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyObject_RichCompare(__pyx_v_eps, Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1261, __pyx_L1_error)
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1261, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_7) {
/* … */
  }
+1262:             xx = infer_result['flat_params']
    __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_n_u_flat_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1262, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_xx = __pyx_t_1;
    __pyx_t_1 = 0;
+1263:             fx = abs(infer_result['log_posterior'])
    __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_n_u_log_posterior); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1263, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyNumber_Absolute(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1263, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_fx = __pyx_t_2;
    __pyx_t_2 = 0;
+1264:             eps = 100 * xx * np.divide(np.spacing(fx),fx)**(0.25)
    __pyx_t_2 = PyNumber_Multiply(__pyx_int_100, __pyx_v_xx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_divide); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_spacing); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
      }
    }
    __pyx_t_5 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_8, __pyx_v_fx) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_fx);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_4 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_5, __pyx_v_fx};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1264, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_5, __pyx_v_fx};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1264, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    {
      __pyx_t_8 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1264, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (__pyx_t_9) {
        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9); __pyx_t_9 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_4, __pyx_t_5);
      __Pyx_INCREF(__pyx_v_fx);
      __Pyx_GIVEREF(__pyx_v_fx);
      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_4, __pyx_v_fx);
      __pyx_t_5 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1264, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyNumber_Power(__pyx_t_1, __pyx_float_0_25, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_eps, __pyx_t_1);
    __pyx_t_1 = 0;
 1265:             #eps = 10.*np.spacing(flat_params)**(0.25)
+1266:         print('epsilon used for differentiation: ', eps)
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_kp_u_epsilon_used_for_differentiation);
  __Pyx_GIVEREF(__pyx_kp_u_epsilon_used_for_differentiation);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_epsilon_used_for_differentiation);
  __Pyx_INCREF(__pyx_v_eps);
  __Pyx_GIVEREF(__pyx_v_eps);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_eps);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 1267: 
+1268:         hess = hessian_finite_difference(flat_params, self._infer_to_minimize, eps, method=fd_method, nprocesses=nprocesses,
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_hessian_finite_difference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_infer_to_minimize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_flat_params);
  __Pyx_GIVEREF(__pyx_v_flat_params);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_flat_params);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_eps);
  __Pyx_GIVEREF(__pyx_v_eps);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_eps);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_method, __pyx_v_fd_method) < 0) __PYX_ERR(0, 1268, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_nprocesses, __pyx_v_nprocesses) < 0) __PYX_ERR(0, 1268, __pyx_L1_error)
/* … */
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_hess = __pyx_t_8;
  __pyx_t_8 = 0;
+1269:                                          basis=basis, function_kwargs=kwargs)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_basis, __pyx_v_basis) < 0) __PYX_ERR(0, 1268, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_function_kwargs, __pyx_v_kwargs) < 0) __PYX_ERR(0, 1268, __pyx_L1_error)
+1270:         return hess
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_hess);
  __pyx_r = __pyx_v_hess;
  goto __pyx_L0;
 1271: 
+1272:     def robustness(self, FIM, FIM_det, infer_result, param_pos_1, param_pos_2,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_43robustness(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_42robustness[] = "\n        Robustness analysis in a two-dimensional slice of the parameter space, revealing neutral spaces as in https://doi.org/10.1073/pnas.1015814108.\n\n        Parameters\n        ----------\n        FIM: 2d numpy.array\n            Fisher Information matrix of a stochastic model\n        FIM_det: 2d numpy.array\n            Fisher information matrix of the corresponding deterministic model\n        infer_result: dict\n            Dictionary returned by `latent_infer`\n        param_pos_1: int\n            Position of 'parameter 1' in map_dict['flat_map'] for x-axis\n        param_pos_2: int\n            Position of 'parameter 2' in map_dict['flat_map'] for y-axis\n        range_1: float\n            Symmetric interval around parameter 1 for which robustness will be analysed. Absolute interval: 'parameter 1' +/- range_1\n        range_2: float\n            Symmetric interval around parameter 2 for which robustness will be analysed. Absolute interval: 'parameter 2' +/- range_2\n        resolution_1: int\n            Resolution of the meshgrid in x direction.\n        resolution_2: int\n            Resolution of the meshgrid in y direction. Default is resolution_2=resolution_1.\n        Returns\n        -------\n        ff: 2d numpy.array\n            shape=resolution_1 x resolution_2, meshgrid for x-axis\n        ss: 2d numpy.array\n            shape=resolution_1 x resolution_2, meshgrid for y-axis\n        Z_sto: 2d numpy.array\n            shape=resolution_1 x resolution_2, expected quadratic coefficient in the Taylor expansion of the likelihood of the stochastic model\n        Z_det: 2d numpy.array\n            shape=resolution_1 x resolution_2, expected quadratic coefficient in the Taylor expansion of the likelihood of the deterministic model\n\n        Examples\n        --------\n        >>> from matplotlib import pyplot as plt\n        >>> from matplotlib import cm\n        >>>\n        >>> # positions 0 and 1 of infer_result['flat_params'] correspond to a ""scale parameter for alpha, and beta, respectively.\n        >>> ff, ss, Z_sto, Z_det = estimator.robustness(FIM, FIM_det, map_dict, 0, 1, 0.5, 0.01, 20)\n        >>> cmap = plt.cm.PuBu_r\n        >>> levels=11\n        >>> colors='black'\n        >>>\n        >>> c = plt.contourf(ff, ss, Z_sto, cmap=cmap, levels=levels) # heat map for the stochastic coefficient\n        >>> plt.contour(ff, ss, Z_sto, colors='black', levels=levels, linewidths=0.25)\n        >>> plt.contour(ff, ss, Z_det, colors=colors, levels=levels) # contour plot for the deterministic model\n        >>> plt.plot(infer_result['flat_params'][0], infer_result['flat_params'][1], 'o',\n                    color=\"#A60628\", markersize=6) # the MAP estimate\n        >>> plt.colorbar(c)\n        >>> plt.xlabel(r'$\007lpha$ scale', fontsize=20, labelpad=10)\n        >>> plt.ylabel(r'$\010eta$', fontsize=20, labelpad=10)\n        >>> plt.show()\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_43robustness(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_FIM = 0;
  PyObject *__pyx_v_FIM_det = 0;
  PyObject *__pyx_v_infer_result = 0;
  PyObject *__pyx_v_param_pos_1 = 0;
  PyObject *__pyx_v_param_pos_2 = 0;
  PyObject *__pyx_v_range_1 = 0;
  PyObject *__pyx_v_range_2 = 0;
  PyObject *__pyx_v_resolution_1 = 0;
  PyObject *__pyx_v_resolution_2 = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("robustness (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_FIM,&__pyx_n_s_FIM_det,&__pyx_n_s_infer_result,&__pyx_n_s_param_pos_1,&__pyx_n_s_param_pos_2,&__pyx_n_s_range_1,&__pyx_n_s_range_2,&__pyx_n_s_resolution_1,&__pyx_n_s_resolution_2,0};
    PyObject* values[9] = {0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_42robustness(CYTHON_UNUSED struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_FIM, PyObject *__pyx_v_FIM_det, PyObject *__pyx_v_infer_result, PyObject *__pyx_v_param_pos_1, PyObject *__pyx_v_param_pos_2, PyObject *__pyx_v_range_1, PyObject *__pyx_v_range_2, PyObject *__pyx_v_resolution_1, PyObject *__pyx_v_resolution_2) {
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_2_robustness *__pyx_cur_scope;
  PyObject *__pyx_v_infer_result_loc = NULL;
  PyObject *__pyx_v_bilinear = 0;
  PyObject *__pyx_v_param_1_range = NULL;
  PyObject *__pyx_v_param_2_range = NULL;
  PyObject *__pyx_v_ff = NULL;
  PyObject *__pyx_v_ss = NULL;
  PyObject *__pyx_v_Z_sto = NULL;
  PyObject *__pyx_v_Z_det = NULL;
  PyObject *__pyx_v_i_k = NULL;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_j_k = NULL;
  PyObject *__pyx_v_j = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("robustness", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pyross_9inference___pyx_scope_struct_2_robustness *)__pyx_tp_new_6pyross_9inference___pyx_scope_struct_2_robustness(__pyx_ptype_6pyross_9inference___pyx_scope_struct_2_robustness, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pyross_9inference___pyx_scope_struct_2_robustness *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1272, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_FIM = __pyx_v_FIM;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_FIM);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_FIM);
  __pyx_cur_scope->__pyx_v_FIM_det = __pyx_v_FIM_det;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_FIM_det);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_FIM_det);
  __pyx_cur_scope->__pyx_v_param_pos_1 = __pyx_v_param_pos_1;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_param_pos_1);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_param_pos_1);
  __pyx_cur_scope->__pyx_v_param_pos_2 = __pyx_v_param_pos_2;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_param_pos_2);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_param_pos_2);
  __Pyx_INCREF(__pyx_v_resolution_2);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pyross.inference.SIR_type.robustness", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_infer_result_loc);
  __Pyx_XDECREF(__pyx_v_bilinear);
  __Pyx_XDECREF(__pyx_v_param_1_range);
  __Pyx_XDECREF(__pyx_v_param_2_range);
  __Pyx_XDECREF(__pyx_v_ff);
  __Pyx_XDECREF(__pyx_v_ss);
  __Pyx_XDECREF(__pyx_v_Z_sto);
  __Pyx_XDECREF(__pyx_v_Z_det);
  __Pyx_XDECREF(__pyx_v_i_k);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_j_k);
  __Pyx_XDECREF(__pyx_v_j);
  __Pyx_XDECREF(__pyx_v_resolution_2);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_obj_6pyross_9inference___pyx_scope_struct_2_robustness {
  PyObject_HEAD
  PyObject *__pyx_v_FIM;
  PyObject *__pyx_v_FIM_det;
  PyObject *__pyx_v_flat_maps;
  PyObject *__pyx_v_param_pos_1;
  PyObject *__pyx_v_param_pos_2;
};

+1273:                    range_1, range_2, resolution_1, resolution_2=None):
    values[8] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_FIM)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_FIM_det)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("robustness", 0, 8, 9, 1); __PYX_ERR(0, 1272, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_infer_result)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("robustness", 0, 8, 9, 2); __PYX_ERR(0, 1272, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_pos_1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("robustness", 0, 8, 9, 3); __PYX_ERR(0, 1272, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_pos_2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("robustness", 0, 8, 9, 4); __PYX_ERR(0, 1272, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_range_1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("robustness", 0, 8, 9, 5); __PYX_ERR(0, 1272, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_range_2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("robustness", 0, 8, 9, 6); __PYX_ERR(0, 1272, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_resolution_1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("robustness", 0, 8, 9, 7); __PYX_ERR(0, 1272, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_resolution_2);
          if (value) { values[8] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "robustness") < 0)) __PYX_ERR(0, 1272, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_FIM = values[0];
    __pyx_v_FIM_det = values[1];
    __pyx_v_infer_result = values[2];
    __pyx_v_param_pos_1 = values[3];
    __pyx_v_param_pos_2 = values[4];
    __pyx_v_range_1 = values[5];
    __pyx_v_range_2 = values[6];
    __pyx_v_resolution_1 = values[7];
    __pyx_v_resolution_2 = values[8];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("robustness", 0, 8, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1272, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.robustness", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_42robustness(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_FIM, __pyx_v_FIM_det, __pyx_v_infer_result, __pyx_v_param_pos_1, __pyx_v_param_pos_2, __pyx_v_range_1, __pyx_v_range_2, __pyx_v_resolution_1, __pyx_v_resolution_2);
 1274:         """
 1275:         Robustness analysis in a two-dimensional slice of the parameter space, revealing neutral spaces as in https://doi.org/10.1073/pnas.1015814108.
 1276: 
 1277:         Parameters
 1278:         ----------
 1279:         FIM: 2d numpy.array
 1280:             Fisher Information matrix of a stochastic model
 1281:         FIM_det: 2d numpy.array
 1282:             Fisher information matrix of the corresponding deterministic model
 1283:         infer_result: dict
 1284:             Dictionary returned by `latent_infer`
 1285:         param_pos_1: int
 1286:             Position of 'parameter 1' in map_dict['flat_map'] for x-axis
 1287:         param_pos_2: int
 1288:             Position of 'parameter 2' in map_dict['flat_map'] for y-axis
 1289:         range_1: float
 1290:             Symmetric interval around parameter 1 for which robustness will be analysed. Absolute interval: 'parameter 1' +/- range_1
 1291:         range_2: float
 1292:             Symmetric interval around parameter 2 for which robustness will be analysed. Absolute interval: 'parameter 2' +/- range_2
 1293:         resolution_1: int
 1294:             Resolution of the meshgrid in x direction.
 1295:         resolution_2: int
 1296:             Resolution of the meshgrid in y direction. Default is resolution_2=resolution_1.
 1297:         Returns
 1298:         -------
 1299:         ff: 2d numpy.array
 1300:             shape=resolution_1 x resolution_2, meshgrid for x-axis
 1301:         ss: 2d numpy.array
 1302:             shape=resolution_1 x resolution_2, meshgrid for y-axis
 1303:         Z_sto: 2d numpy.array
 1304:             shape=resolution_1 x resolution_2, expected quadratic coefficient in the Taylor expansion of the likelihood of the stochastic model
 1305:         Z_det: 2d numpy.array
 1306:             shape=resolution_1 x resolution_2, expected quadratic coefficient in the Taylor expansion of the likelihood of the deterministic model
 1307: 
 1308:         Examples
 1309:         --------
 1310:         >>> from matplotlib import pyplot as plt
 1311:         >>> from matplotlib import cm
 1312:         >>>
 1313:         >>> # positions 0 and 1 of infer_result['flat_params'] correspond to a scale parameter for alpha, and beta, respectively.
 1314:         >>> ff, ss, Z_sto, Z_det = estimator.robustness(FIM, FIM_det, map_dict, 0, 1, 0.5, 0.01, 20)
 1315:         >>> cmap = plt.cm.PuBu_r
 1316:         >>> levels=11
 1317:         >>> colors='black'
 1318:         >>>
 1319:         >>> c = plt.contourf(ff, ss, Z_sto, cmap=cmap, levels=levels) # heat map for the stochastic coefficient
 1320:         >>> plt.contour(ff, ss, Z_sto, colors='black', levels=levels, linewidths=0.25)
 1321:         >>> plt.contour(ff, ss, Z_det, colors=colors, levels=levels) # contour plot for the deterministic model
 1322:         >>> plt.plot(infer_result['flat_params'][0], infer_result['flat_params'][1], 'o',
 1323:                     color="#A60628", markersize=6) # the MAP estimate
 1324:         >>> plt.colorbar(c)
 1325:         >>> plt.xlabel(r'$\alpha$ scale', fontsize=20, labelpad=10)
 1326:         >>> plt.ylabel(r'$\beta$', fontsize=20, labelpad=10)
 1327:         >>> plt.show()
 1328:         """
+1329:         infer_result_loc = infer_result.copy()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_infer_result, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_infer_result_loc = __pyx_t_1;
  __pyx_t_1 = 0;
 1330:         # backwards compatibility
+1331:         if 'flat_map' in infer_result_loc:
  __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_flat_map, __pyx_v_infer_result_loc, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1331, __pyx_L1_error)
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {
/* … */
  }
+1332:             infer_result_loc['flat_params'] = infer_result_loc.pop('flat_map')
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_infer_result_loc, __pyx_n_s_pop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1332, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_n_u_flat_map) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_u_flat_map);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1332, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_infer_result_loc, __pyx_n_u_flat_params, __pyx_t_1) < 0)) __PYX_ERR(0, 1332, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1333: 
+1334:         flat_maps = infer_result_loc['flat_params']
  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result_loc, __pyx_n_u_flat_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1334, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_flat_maps = __pyx_t_1;
  __pyx_t_1 = 0;
+1335:         if resolution_2 == None:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_resolution_2, Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1335, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1335, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {
/* … */
  }
+1336:             resolution_2 = resolution_1
    __Pyx_INCREF(__pyx_v_resolution_1);
    __Pyx_DECREF_SET(__pyx_v_resolution_2, __pyx_v_resolution_1);
+1337:         def bilinear(param_1, param_2, det=True):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_10robustness_1bilinear(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6pyross_9inference_8SIR_type_10robustness_1bilinear = {"bilinear", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6pyross_9inference_8SIR_type_10robustness_1bilinear, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_10robustness_1bilinear(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_param_1 = 0;
  PyObject *__pyx_v_param_2 = 0;
  PyObject *__pyx_v_det = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bilinear (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_param_1,&__pyx_n_s_param_2,&__pyx_n_s_det,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)((PyObject *)Py_True));
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_1)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("bilinear", 0, 2, 3, 1); __PYX_ERR(0, 1337, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_det);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bilinear") < 0)) __PYX_ERR(0, 1337, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_param_1 = values[0];
    __pyx_v_param_2 = values[1];
    __pyx_v_det = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("bilinear", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1337, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.robustness.bilinear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_10robustness_bilinear(__pyx_self, __pyx_v_param_1, __pyx_v_param_2, __pyx_v_det);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_10robustness_bilinear(PyObject *__pyx_self, PyObject *__pyx_v_param_1, PyObject *__pyx_v_param_2, PyObject *__pyx_v_det) {
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_2_robustness *__pyx_cur_scope;
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_2_robustness *__pyx_outer_scope;
  PyObject *__pyx_v_maps_temp = NULL;
  PyObject *__pyx_v_dev = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bilinear", 0);
  __pyx_outer_scope = (struct __pyx_obj_6pyross_9inference___pyx_scope_struct_2_robustness *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyross.inference.SIR_type.robustness.bilinear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_maps_temp);
  __Pyx_XDECREF(__pyx_v_dev);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__17 = PyTuple_Pack(5, __pyx_n_s_param_1, __pyx_n_s_param_2, __pyx_n_s_det, __pyx_n_s_maps_temp, __pyx_n_s_dev); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 1337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__17);
  __Pyx_GIVEREF(__pyx_tuple__17);
  __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyross_inference_pyx, __pyx_n_s_bilinear, 1337, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(0, 1337, __pyx_L1_error)
/* … */
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6pyross_9inference_8SIR_type_10robustness_1bilinear, 0, __pyx_n_s_robustness_locals_bilinear, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pyross_inference, __pyx_d, ((PyObject *)__pyx_codeobj__18)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__19);
  __pyx_v_bilinear = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_tuple__19 = PyTuple_Pack(1, ((PyObject *)Py_True)); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 1337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__19);
  __Pyx_GIVEREF(__pyx_tuple__19);
+1338:             maps_temp = np.copy(flat_maps)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_v_flat_maps)) { __Pyx_RaiseClosureNameError("flat_maps"); __PYX_ERR(0, 1338, __pyx_L1_error) }
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_cur_scope->__pyx_v_flat_maps) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_cur_scope->__pyx_v_flat_maps);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_maps_temp = __pyx_t_1;
  __pyx_t_1 = 0;
+1339:             maps_temp[param_pos_1] += param_1
  if (unlikely(!__pyx_cur_scope->__pyx_v_param_pos_1)) { __Pyx_RaiseClosureNameError("param_pos_1"); __PYX_ERR(0, 1339, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_param_pos_1);
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_param_pos_1;
  __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_maps_temp, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1339, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_t_3, __pyx_v_param_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1339, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(PyObject_SetItem(__pyx_v_maps_temp, __pyx_t_1, __pyx_t_2) < 0)) __PYX_ERR(0, 1339, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1340:             maps_temp[param_pos_2] += param_2
  if (unlikely(!__pyx_cur_scope->__pyx_v_param_pos_2)) { __Pyx_RaiseClosureNameError("param_pos_2"); __PYX_ERR(0, 1340, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_param_pos_2);
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_param_pos_2;
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_maps_temp, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_t_2, __pyx_v_param_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(PyObject_SetItem(__pyx_v_maps_temp, __pyx_t_1, __pyx_t_3) < 0)) __PYX_ERR(0, 1340, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1341:             dev = maps_temp - flat_maps
  if (unlikely(!__pyx_cur_scope->__pyx_v_flat_maps)) { __Pyx_RaiseClosureNameError("flat_maps"); __PYX_ERR(0, 1341, __pyx_L1_error) }
  __pyx_t_1 = PyNumber_Subtract(__pyx_v_maps_temp, __pyx_cur_scope->__pyx_v_flat_maps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_dev = __pyx_t_1;
  __pyx_t_1 = 0;
+1342:             if det:
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_det); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1342, __pyx_L1_error)
  if (__pyx_t_4) {
/* … */
  }
+1343:                 return -dev@FIM_det@dev
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyNumber_Negative(__pyx_v_dev); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(!__pyx_cur_scope->__pyx_v_FIM_det)) { __Pyx_RaiseClosureNameError("FIM_det"); __PYX_ERR(0, 1343, __pyx_L1_error) }
    __pyx_t_3 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_1, __pyx_cur_scope->__pyx_v_FIM_det); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_3, __pyx_v_dev); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 1344:             else:
+1345:                 return -dev@FIM@dev
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyNumber_Negative(__pyx_v_dev); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(!__pyx_cur_scope->__pyx_v_FIM)) { __Pyx_RaiseClosureNameError("FIM"); __PYX_ERR(0, 1345, __pyx_L1_error) }
    __pyx_t_3 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_1, __pyx_cur_scope->__pyx_v_FIM); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_3, __pyx_v_dev); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
+1346:         param_1_range = np.linspace(-range_1, range_1, resolution_1)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1346, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_linspace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1346, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Negative(__pyx_v_range_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1346, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_t_2, __pyx_v_range_1, __pyx_v_resolution_1};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1346, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_t_2, __pyx_v_range_1, __pyx_v_resolution_1};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1346, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_2);
    __Pyx_INCREF(__pyx_v_range_1);
    __Pyx_GIVEREF(__pyx_v_range_1);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_range_1);
    __Pyx_INCREF(__pyx_v_resolution_1);
    __Pyx_GIVEREF(__pyx_v_resolution_1);
    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_v_resolution_1);
    __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_param_1_range = __pyx_t_1;
  __pyx_t_1 = 0;
+1347:         param_2_range = np.linspace(-range_2, range_2, resolution_2)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_linspace); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Negative(__pyx_v_range_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_t_3, __pyx_v_range_2, __pyx_v_resolution_2};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1347, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_t_3, __pyx_v_range_2, __pyx_v_resolution_2};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1347, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_7, __pyx_t_3);
    __Pyx_INCREF(__pyx_v_range_2);
    __Pyx_GIVEREF(__pyx_v_range_2);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_7, __pyx_v_range_2);
    __Pyx_INCREF(__pyx_v_resolution_2);
    __Pyx_GIVEREF(__pyx_v_resolution_2);
    PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_7, __pyx_v_resolution_2);
    __pyx_t_3 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_param_2_range = __pyx_t_1;
  __pyx_t_1 = 0;
+1348:         ff, ss = np.meshgrid(flat_maps[param_pos_1] + param_1_range,
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_meshgrid); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_flat_maps, __pyx_cur_scope->__pyx_v_param_pos_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_3 = PyNumber_Add(__pyx_t_8, __pyx_v_param_1_range); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
  __pyx_v_ff = __pyx_t_6;
  __pyx_t_6 = 0;
  __pyx_v_ss = __pyx_t_9;
  __pyx_t_9 = 0;
+1349:                             flat_maps[param_pos_2] + param_2_range)
  __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_cur_scope->__pyx_v_flat_maps, __pyx_cur_scope->__pyx_v_param_pos_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_2 = PyNumber_Add(__pyx_t_8, __pyx_v_param_2_range); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_3, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1348, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_3, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1348, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1348, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_8) {
      __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_7, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_7, __pyx_t_2);
    __pyx_t_3 = 0;
    __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1348, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1348, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_6 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_9);
    #else
    __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1348, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1348, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1348, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_10 = Py_TYPE(__pyx_t_2)->tp_iternext;
    index = 0; __pyx_t_6 = __pyx_t_10(__pyx_t_2); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_6);
    index = 1; __pyx_t_9 = __pyx_t_10(__pyx_t_2); if (unlikely(!__pyx_t_9)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_9);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_2), 2) < 0) __PYX_ERR(0, 1348, __pyx_L1_error)
    __pyx_t_10 = NULL;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_10 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1348, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
+1350:         Z_sto = np.zeros((len(param_1_range), len(param_2_range)))
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_11 = PyObject_Length(__pyx_v_param_1_range); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1350, __pyx_L1_error)
  __pyx_t_9 = PyInt_FromSsize_t(__pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_11 = PyObject_Length(__pyx_v_param_2_range); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1350, __pyx_L1_error)
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __pyx_t_9 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_Z_sto = __pyx_t_1;
  __pyx_t_1 = 0;
+1351:         Z_det = np.zeros((len(param_1_range), len(param_2_range)))
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_11 = PyObject_Length(__pyx_v_param_1_range); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1351, __pyx_L1_error)
  __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_11 = PyObject_Length(__pyx_v_param_2_range); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1351, __pyx_L1_error)
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_2);
  __pyx_t_6 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_Z_det = __pyx_t_1;
  __pyx_t_1 = 0;
+1352:         i_k = 0
  __Pyx_INCREF(__pyx_int_0);
  __pyx_v_i_k = __pyx_int_0;
+1353:         for i in param_1_range:
  if (likely(PyList_CheckExact(__pyx_v_param_1_range)) || PyTuple_CheckExact(__pyx_v_param_1_range)) {
    __pyx_t_1 = __pyx_v_param_1_range; __Pyx_INCREF(__pyx_t_1); __pyx_t_11 = 0;
    __pyx_t_12 = NULL;
  } else {
    __pyx_t_11 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_param_1_range); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1353, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_12 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1353, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_12)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1353, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1353, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1353, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1353, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_12(__pyx_t_1);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1353, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1354:             j_k = 0
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_XDECREF_SET(__pyx_v_j_k, __pyx_int_0);
+1355:             for j in param_2_range:
    if (likely(PyList_CheckExact(__pyx_v_param_2_range)) || PyTuple_CheckExact(__pyx_v_param_2_range)) {
      __pyx_t_3 = __pyx_v_param_2_range; __Pyx_INCREF(__pyx_t_3); __pyx_t_13 = 0;
      __pyx_t_14 = NULL;
    } else {
      __pyx_t_13 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_param_2_range); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1355, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_14 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1355, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_14)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_9); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 1355, __pyx_L1_error)
          #else
          __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1355, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          #endif
        } else {
          if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_9); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 1355, __pyx_L1_error)
          #else
          __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1355, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          #endif
        }
      } else {
        __pyx_t_9 = __pyx_t_14(__pyx_t_3);
        if (unlikely(!__pyx_t_9)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 1355, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_9);
      }
      __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_9);
      __pyx_t_9 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1356:                 Z_det[i_k,j_k] = bilinear(i,j,det=True)
      __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1356, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_v_i);
      __Pyx_GIVEREF(__pyx_v_i);
      PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_i);
      __Pyx_INCREF(__pyx_v_j);
      __Pyx_GIVEREF(__pyx_v_j);
      PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_j);
      __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1356, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_det, Py_True) < 0) __PYX_ERR(0, 1356, __pyx_L1_error)
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_bilinear, __pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1356, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1356, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_v_i_k);
      __Pyx_GIVEREF(__pyx_v_i_k);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_i_k);
      __Pyx_INCREF(__pyx_v_j_k);
      __Pyx_GIVEREF(__pyx_v_j_k);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_j_k);
      if (unlikely(PyObject_SetItem(__pyx_v_Z_det, __pyx_t_2, __pyx_t_6) < 0)) __PYX_ERR(0, 1356, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+1357:                 Z_sto[i_k,j_k] = bilinear(i,j,det=False)
      __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1357, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_v_i);
      __Pyx_GIVEREF(__pyx_v_i);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_i);
      __Pyx_INCREF(__pyx_v_j);
      __Pyx_GIVEREF(__pyx_v_j);
      PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_j);
      __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1357, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_det, Py_False) < 0) __PYX_ERR(0, 1357, __pyx_L1_error)
      __pyx_t_9 = __Pyx_PyObject_Call(__pyx_v_bilinear, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1357, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1357, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_v_i_k);
      __Pyx_GIVEREF(__pyx_v_i_k);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_i_k);
      __Pyx_INCREF(__pyx_v_j_k);
      __Pyx_GIVEREF(__pyx_v_j_k);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_j_k);
      if (unlikely(PyObject_SetItem(__pyx_v_Z_sto, __pyx_t_2, __pyx_t_9) < 0)) __PYX_ERR(0, 1357, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+1358:                 j_k += 1
      __pyx_t_9 = __Pyx_PyInt_AddObjC(__pyx_v_j_k, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1358, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF_SET(__pyx_v_j_k, __pyx_t_9);
      __pyx_t_9 = 0;
+1359:             i_k += 1
    __pyx_t_3 = __Pyx_PyInt_AddObjC(__pyx_v_i_k, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_i_k, __pyx_t_3);
    __pyx_t_3 = 0;
+1360:         return ff, ss, Z_sto, Z_det
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1360, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_ff);
  __Pyx_GIVEREF(__pyx_v_ff);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_ff);
  __Pyx_INCREF(__pyx_v_ss);
  __Pyx_GIVEREF(__pyx_v_ss);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_ss);
  __Pyx_INCREF(__pyx_v_Z_sto);
  __Pyx_GIVEREF(__pyx_v_Z_sto);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_Z_sto);
  __Pyx_INCREF(__pyx_v_Z_det);
  __Pyx_GIVEREF(__pyx_v_Z_det);
  PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_Z_det);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1361: 
+1362:     def sensitivity(self, FIM):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_45sensitivity(PyObject *__pyx_v_self, PyObject *__pyx_v_FIM); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_44sensitivity[] = "\n        Computes sensitivity measures (not normalised) for\n        1) each individual parameter: from the diagonal elements of the FIM\n        2) incorporating parametric interactions: from the standard deviations derived from the FIM\n        More on these interpretations can be found here: https://doi.org/10.1529/biophysj.104.053405\n        A larger entry translates into greater anticipated model sensitivity to changes in the parameter of interest.\n\n        Parameters\n        ----------\n        FIM: 2d numpy.array\n            The Fisher Information Matrix\n\n        Returns\n        -------\n        sensitivity_individual: numpy.array\n            Sensitivity measure for individual parameters.\n        sensitivity_correlated: numpy.array\n            Sensitivity measure incorporating parametric interactions.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_45sensitivity(PyObject *__pyx_v_self, PyObject *__pyx_v_FIM) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sensitivity (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_44sensitivity(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), ((PyObject *)__pyx_v_FIM));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_44sensitivity(CYTHON_UNUSED struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_FIM) {
  PyObject *__pyx_v_sensitivity_individual = NULL;
  PyObject *__pyx_v_sensitivity_correlated = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sensitivity", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("pyross.inference.SIR_type.sensitivity", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_sensitivity_individual);
  __Pyx_XDECREF(__pyx_v_sensitivity_correlated);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1363:         """
 1364:         Computes sensitivity measures (not normalised) for
 1365:         1) each individual parameter: from the diagonal elements of the FIM
 1366:         2) incorporating parametric interactions: from the standard deviations derived from the FIM
 1367:         More on these interpretations can be found here: https://doi.org/10.1529/biophysj.104.053405
 1368:         A larger entry translates into greater anticipated model sensitivity to changes in the parameter of interest.
 1369: 
 1370:         Parameters
 1371:         ----------
 1372:         FIM: 2d numpy.array
 1373:             The Fisher Information Matrix
 1374: 
 1375:         Returns
 1376:         -------
 1377:         sensitivity_individual: numpy.array
 1378:             Sensitivity measure for individual parameters.
 1379:         sensitivity_correlated: numpy.array
 1380:             Sensitivity measure incorporating parametric interactions.
 1381:         """
+1382:         if not np.all(np.linalg.eigvalsh(FIM)>0):
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_all); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_linalg); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_eigvalsh); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_FIM) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_FIM);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1382, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1382, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_7 = ((!__pyx_t_6) != 0);
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+1383:             raise Exception("FIM not positive definite - check for appropriate step-size `eps` in FIM computation and/or increase `inter_steps` for a more stable result")
    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1383, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 1383, __pyx_L1_error)
/* … */
  __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_u_FIM_not_positive_definite_check); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 1383, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__20);
  __Pyx_GIVEREF(__pyx_tuple__20);
 1384: 
+1385:         sensitivity_individual = np.sqrt(np.diagonal(FIM))
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_diagonal); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_v_FIM) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_FIM);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_sensitivity_individual = __pyx_t_1;
  __pyx_t_1 = 0;
+1386:         sensitivity_correlated = np.divide(1, np.sqrt(np.diagonal(np.linalg.inv(FIM))))
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1386, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_divide); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1386, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1386, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1386, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1386, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_diagonal); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1386, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1386, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_linalg); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1386, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_inv); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1386, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_11)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
    }
  }
  __pyx_t_8 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_11, __pyx_v_FIM) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_FIM);
  __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1386, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_9, function);
    }
  }
  __pyx_t_5 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_10, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1386, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_4 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_9, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1386, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_12 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_12 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_int_1, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1386, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_int_1, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1386, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1386, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_int_1);
    __Pyx_GIVEREF(__pyx_int_1);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_12, __pyx_int_1);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_12, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1386, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_sensitivity_correlated = __pyx_t_1;
  __pyx_t_1 = 0;
 1387: 
+1388:         return sensitivity_individual, sensitivity_correlated
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1388, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_sensitivity_individual);
  __Pyx_GIVEREF(__pyx_v_sensitivity_individual);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_sensitivity_individual);
  __Pyx_INCREF(__pyx_v_sensitivity_correlated);
  __Pyx_GIVEREF(__pyx_v_sensitivity_correlated);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_sensitivity_correlated);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1389: 
+1390:     def sample_gaussian(self, N, map_estimate, cov, x, Tf, contactMatrix, prior_dict, tangent=False):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_47sample_gaussian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_46sample_gaussian[] = "\n        Sample `N` samples of the parameters from the Gaussian centered at the MAP estimate with specified\n        covariance `cov`.\n\n        Parameters\n        ----------\n        N: int\n            The number of samples.\n        map_estimate: dict\n            The MAP estimate, e.g. as computed by `inference.infer_parameters`.\n        cov: np.array\n            The covariance matrix of the flat parameters.\n        x:  np.array\n            The full trajectory.\n        Tf: float\n            The total time of the trajectory.\n        contactMatrix: callable\n            A function that returns the contact matrix at time t (input).\n        prior_dict: dict\n            A dictionary containing priors. See examples.\n        tangent: bool, optional\n            Set to True to use tangent space inference. Default is False.\n\n        Returns\n        -------\n        samples: list of dict\n            N samples of the Gaussian distribution.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_47sample_gaussian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_N = 0;
  PyObject *__pyx_v_map_estimate = 0;
  PyObject *__pyx_v_cov = 0;
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_Tf = 0;
  CYTHON_UNUSED PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_prior_dict = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sample_gaussian (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_N,&__pyx_n_s_map_estimate,&__pyx_n_s_cov_2,&__pyx_n_s_x,&__pyx_n_s_Tf,&__pyx_n_s_contactMatrix,&__pyx_n_s_prior_dict,&__pyx_n_s_tangent,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
    values[7] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_map_estimate)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_gaussian", 0, 7, 8, 1); __PYX_ERR(0, 1390, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cov_2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_gaussian", 0, 7, 8, 2); __PYX_ERR(0, 1390, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_gaussian", 0, 7, 8, 3); __PYX_ERR(0, 1390, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_gaussian", 0, 7, 8, 4); __PYX_ERR(0, 1390, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_gaussian", 0, 7, 8, 5); __PYX_ERR(0, 1390, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prior_dict)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_gaussian", 0, 7, 8, 6); __PYX_ERR(0, 1390, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[7] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sample_gaussian") < 0)) __PYX_ERR(0, 1390, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_N = values[0];
    __pyx_v_map_estimate = values[1];
    __pyx_v_cov = values[2];
    __pyx_v_x = values[3];
    __pyx_v_Tf = values[4];
    __pyx_v_contactMatrix = values[5];
    __pyx_v_prior_dict = values[6];
    __pyx_v_tangent = values[7];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("sample_gaussian", 0, 7, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1390, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.sample_gaussian", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_46sample_gaussian(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_N, __pyx_v_map_estimate, __pyx_v_cov, __pyx_v_x, __pyx_v_Tf, __pyx_v_contactMatrix, __pyx_v_prior_dict, __pyx_v_tangent);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_46sample_gaussian(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_N, PyObject *__pyx_v_map_estimate, PyObject *__pyx_v_cov, PyObject *__pyx_v_x, PyObject *__pyx_v_Tf, CYTHON_UNUSED PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_prior_dict, PyObject *__pyx_v_tangent) {
  PyObject *__pyx_v_prior_names = NULL;
  PyObject *__pyx_v_keys = NULL;
  PyObject *__pyx_v_guess = NULL;
  PyObject *__pyx_v_stds = NULL;
  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
  PyObject *__pyx_v_bounds = NULL;
  PyObject *__pyx_v_flat_guess_range = NULL;
  PyObject *__pyx_v_is_scale_parameter = NULL;
  PyObject *__pyx_v_scaled_guesses = NULL;
  PyObject *__pyx_v_prior = NULL;
  PyObject *__pyx_v_loglike_args = NULL;
  PyObject *__pyx_v_mean = NULL;
  PyObject *__pyx_v_sample_parameters = NULL;
  PyObject *__pyx_v_samples = NULL;
  PyObject *__pyx_v_sample = NULL;
  PyObject *__pyx_v_new_sample = NULL;
  PyObject *__pyx_v_l_like = NULL;
  PyObject *__pyx_v_l_prior = NULL;
  PyObject *__pyx_v_l_post = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sample_gaussian", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("pyross.inference.SIR_type.sample_gaussian", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_prior_names);
  __Pyx_XDECREF(__pyx_v_keys);
  __Pyx_XDECREF(__pyx_v_guess);
  __Pyx_XDECREF(__pyx_v_stds);
  __Pyx_XDECREF(__pyx_v__);
  __Pyx_XDECREF(__pyx_v_bounds);
  __Pyx_XDECREF(__pyx_v_flat_guess_range);
  __Pyx_XDECREF(__pyx_v_is_scale_parameter);
  __Pyx_XDECREF(__pyx_v_scaled_guesses);
  __Pyx_XDECREF(__pyx_v_prior);
  __Pyx_XDECREF(__pyx_v_loglike_args);
  __Pyx_XDECREF(__pyx_v_mean);
  __Pyx_XDECREF(__pyx_v_sample_parameters);
  __Pyx_XDECREF(__pyx_v_samples);
  __Pyx_XDECREF(__pyx_v_sample);
  __Pyx_XDECREF(__pyx_v_new_sample);
  __Pyx_XDECREF(__pyx_v_l_like);
  __Pyx_XDECREF(__pyx_v_l_prior);
  __Pyx_XDECREF(__pyx_v_l_post);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1391:         """
 1392:         Sample `N` samples of the parameters from the Gaussian centered at the MAP estimate with specified
 1393:         covariance `cov`.
 1394: 
 1395:         Parameters
 1396:         ----------
 1397:         N: int
 1398:             The number of samples.
 1399:         map_estimate: dict
 1400:             The MAP estimate, e.g. as computed by `inference.infer_parameters`.
 1401:         cov: np.array
 1402:             The covariance matrix of the flat parameters.
 1403:         x:  np.array
 1404:             The full trajectory.
 1405:         Tf: float
 1406:             The total time of the trajectory.
 1407:         contactMatrix: callable
 1408:             A function that returns the contact matrix at time t (input).
 1409:         prior_dict: dict
 1410:             A dictionary containing priors. See examples.
 1411:         tangent: bool, optional
 1412:             Set to True to use tangent space inference. Default is False.
 1413: 
 1414:         Returns
 1415:         -------
 1416:         samples: list of dict
 1417:             N samples of the Gaussian distribution.
 1418:         """
+1419:         prior_names, keys, guess, stds, _, _, bounds, flat_guess_range, is_scale_parameter, scaled_guesses \
  __pyx_v_prior_names = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_keys = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_guess = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_stds = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v__ = __pyx_t_6;
  __pyx_t_6 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_7);
  __pyx_t_7 = 0;
  __pyx_v_bounds = __pyx_t_8;
  __pyx_t_8 = 0;
  __pyx_v_flat_guess_range = __pyx_t_9;
  __pyx_t_9 = 0;
  __pyx_v_is_scale_parameter = __pyx_t_10;
  __pyx_t_10 = 0;
  __pyx_v_scaled_guesses = __pyx_t_11;
  __pyx_t_11 = 0;
+1420:             = pyross.utils.parse_param_prior_dict(prior_dict, self.M, check_length=(not self.param_mapping_enabled))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyross); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_utils); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_parse_param_prior_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->M); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_prior_dict);
  __Pyx_GIVEREF(__pyx_v_prior_dict);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_prior_dict);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyBool_FromLong((!(__pyx_v_self->param_mapping_enabled != 0))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_check_length, __pyx_t_4) < 0) __PYX_ERR(0, 1420, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
    PyObject* sequence = __pyx_t_4;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 10)) {
      if (size > 10) __Pyx_RaiseTooManyValuesError(10);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1419, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_7 = PyTuple_GET_ITEM(sequence, 5); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 6); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 7); 
      __pyx_t_10 = PyTuple_GET_ITEM(sequence, 8); 
      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 9); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_7 = PyList_GET_ITEM(sequence, 5); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 6); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 7); 
      __pyx_t_10 = PyList_GET_ITEM(sequence, 8); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 9); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx_t_11);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[10] = {&__pyx_t_2,&__pyx_t_3,&__pyx_t_1,&__pyx_t_5,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11};
      for (i=0; i < 10; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1419, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[10] = {&__pyx_t_2,&__pyx_t_3,&__pyx_t_1,&__pyx_t_5,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11};
    __pyx_t_12 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1419, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_13 = Py_TYPE(__pyx_t_12)->tp_iternext;
    for (index=0; index < 10; index++) {
      PyObject* item = __pyx_t_13(__pyx_t_12); if (unlikely(!item)) goto __pyx_L3_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_12), 10) < 0) __PYX_ERR(0, 1419, __pyx_L1_error)
    __pyx_t_13 = NULL;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_13 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1419, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
+1421:         prior = Prior(prior_names, bounds, guess, stds)
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_Prior); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_10 = NULL;
  __pyx_t_14 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
      __pyx_t_14 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_11)) {
    PyObject *__pyx_temp[5] = {__pyx_t_10, __pyx_v_prior_names, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_14, 4+__pyx_t_14); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1421, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
    PyObject *__pyx_temp[5] = {__pyx_t_10, __pyx_v_prior_names, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_14, 4+__pyx_t_14); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1421, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(4+__pyx_t_14); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1421, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_10) {
      __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_10); __pyx_t_10 = NULL;
    }
    __Pyx_INCREF(__pyx_v_prior_names);
    __Pyx_GIVEREF(__pyx_v_prior_names);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_14, __pyx_v_prior_names);
    __Pyx_INCREF(__pyx_v_bounds);
    __Pyx_GIVEREF(__pyx_v_bounds);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_14, __pyx_v_bounds);
    __Pyx_INCREF(__pyx_v_guess);
    __Pyx_GIVEREF(__pyx_v_guess);
    PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_14, __pyx_v_guess);
    __Pyx_INCREF(__pyx_v_stds);
    __Pyx_GIVEREF(__pyx_v_stds);
    PyTuple_SET_ITEM(__pyx_t_9, 3+__pyx_t_14, __pyx_v_stds);
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_9, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1421, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_v_prior = __pyx_t_4;
  __pyx_t_4 = 0;
+1422:         loglike_args = {'keys':keys, 'is_scale_parameter':is_scale_parameter,
  __pyx_t_4 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_keys, __pyx_v_keys) < 0) __PYX_ERR(0, 1422, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_is_scale_parameter, __pyx_v_is_scale_parameter) < 0) __PYX_ERR(0, 1422, __pyx_L1_error)
+1423:                        'scaled_guesses':scaled_guesses, 'flat_guess_range':flat_guess_range,
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_scaled_guesses, __pyx_v_scaled_guesses) < 0) __PYX_ERR(0, 1422, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_flat_guess_range, __pyx_v_flat_guess_range) < 0) __PYX_ERR(0, 1422, __pyx_L1_error)
+1424:                        'x':x, 'Tf':Tf, 'tangent':tangent}
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_x, __pyx_v_x) < 0) __PYX_ERR(0, 1422, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_Tf, __pyx_v_Tf) < 0) __PYX_ERR(0, 1422, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_tangent, __pyx_v_tangent) < 0) __PYX_ERR(0, 1422, __pyx_L1_error)
  __pyx_v_loglike_args = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
 1425: 
 1426:         # Sample the flat parameters.
+1427:         mean = map_estimate['flat_map']
  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_map_estimate, __pyx_n_u_flat_map); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1427, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_mean = __pyx_t_4;
  __pyx_t_4 = 0;
+1428:         sample_parameters = np.random.multivariate_normal(mean, cov, N)
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1428, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_random); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1428, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_multivariate_normal); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1428, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = NULL;
  __pyx_t_14 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
      __pyx_t_14 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_11)) {
    PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_v_mean, __pyx_v_cov, __pyx_v_N};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_14, 3+__pyx_t_14); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1428, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
    PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_v_mean, __pyx_v_cov, __pyx_v_N};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_14, 3+__pyx_t_14); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1428, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  {
    __pyx_t_10 = PyTuple_New(3+__pyx_t_14); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1428, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__pyx_t_9) {
      __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
    }
    __Pyx_INCREF(__pyx_v_mean);
    __Pyx_GIVEREF(__pyx_v_mean);
    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_14, __pyx_v_mean);
    __Pyx_INCREF(__pyx_v_cov);
    __Pyx_GIVEREF(__pyx_v_cov);
    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_14, __pyx_v_cov);
    __Pyx_INCREF(__pyx_v_N);
    __Pyx_GIVEREF(__pyx_v_N);
    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_14, __pyx_v_N);
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_10, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1428, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_v_sample_parameters = __pyx_t_4;
  __pyx_t_4 = 0;
 1429: 
+1430:         samples = []
  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1430, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_samples = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+1431:         for sample in sample_parameters:
  if (likely(PyList_CheckExact(__pyx_v_sample_parameters)) || PyTuple_CheckExact(__pyx_v_sample_parameters)) {
    __pyx_t_4 = __pyx_v_sample_parameters; __Pyx_INCREF(__pyx_t_4); __pyx_t_15 = 0;
    __pyx_t_16 = NULL;
  } else {
    __pyx_t_15 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_sample_parameters); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1431, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_16 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1431, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_16)) {
      if (likely(PyList_CheckExact(__pyx_t_4))) {
        if (__pyx_t_15 >= PyList_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_11 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_15); __Pyx_INCREF(__pyx_t_11); __pyx_t_15++; if (unlikely(0 < 0)) __PYX_ERR(0, 1431, __pyx_L1_error)
        #else
        __pyx_t_11 = PySequence_ITEM(__pyx_t_4, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1431, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        #endif
      } else {
        if (__pyx_t_15 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_15); __Pyx_INCREF(__pyx_t_11); __pyx_t_15++; if (unlikely(0 < 0)) __PYX_ERR(0, 1431, __pyx_L1_error)
        #else
        __pyx_t_11 = PySequence_ITEM(__pyx_t_4, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1431, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        #endif
      }
    } else {
      __pyx_t_11 = __pyx_t_16(__pyx_t_4);
      if (unlikely(!__pyx_t_11)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1431, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_11);
    }
    __Pyx_XDECREF_SET(__pyx_v_sample, __pyx_t_11);
    __pyx_t_11 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1432:             new_sample = map_estimate.copy()
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_map_estimate, __pyx_n_s_copy); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1432, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_11 = (__pyx_t_9) ? __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_9) : __Pyx_PyObject_CallNoArg(__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1432, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF_SET(__pyx_v_new_sample, __pyx_t_11);
    __pyx_t_11 = 0;
+1433:             new_sample['flat_params'] = sample
    if (unlikely(PyObject_SetItem(__pyx_v_new_sample, __pyx_n_u_flat_params, __pyx_v_sample) < 0)) __PYX_ERR(0, 1433, __pyx_L1_error)
+1434:             new_sample['map_dict'] = \
    if (unlikely(PyObject_SetItem(__pyx_v_new_sample, __pyx_n_u_map_dict, __pyx_t_11) < 0)) __PYX_ERR(0, 1434, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+1435:                 pyross.utils.unflatten_parameters(sample, map_estimate['flat_guess_range'],
    __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_pyross); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1435, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_utils); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1435, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_unflatten_parameters); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1435, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_Dict_GetItem(__pyx_v_map_estimate, __pyx_n_u_flat_guess_range); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1435, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
+1436:                         map_estimate['is_scale_parameter'], map_estimate['scaled_guesses'])
    __pyx_t_8 = __Pyx_PyObject_Dict_GetItem(__pyx_v_map_estimate, __pyx_n_u_is_scale_parameter); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1436, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = __Pyx_PyObject_Dict_GetItem(__pyx_v_map_estimate, __pyx_n_u_scaled_guesses); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1436, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = NULL;
    __pyx_t_14 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
        __pyx_t_14 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_10)) {
      PyObject *__pyx_temp[5] = {__pyx_t_6, __pyx_v_sample, __pyx_t_9, __pyx_t_8, __pyx_t_7};
      __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_14, 4+__pyx_t_14); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1435, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
      PyObject *__pyx_temp[5] = {__pyx_t_6, __pyx_v_sample, __pyx_t_9, __pyx_t_8, __pyx_t_7};
      __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_14, 4+__pyx_t_14); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1435, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    {
      __pyx_t_5 = PyTuple_New(4+__pyx_t_14); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1435, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__pyx_t_6) {
        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __pyx_t_6 = NULL;
      }
      __Pyx_INCREF(__pyx_v_sample);
      __Pyx_GIVEREF(__pyx_v_sample);
      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_14, __pyx_v_sample);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_14, __pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_14, __pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_14, __pyx_t_7);
      __pyx_t_9 = 0;
      __pyx_t_8 = 0;
      __pyx_t_7 = 0;
      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_5, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1435, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+1437:             l_like = self._loglike(sample, **loglike_args)
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_loglike); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_INCREF(__pyx_v_sample);
    __Pyx_GIVEREF(__pyx_v_sample);
    PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_sample);
    __pyx_t_5 = PyDict_Copy(__pyx_v_loglike_args); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_10, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF_SET(__pyx_v_l_like, __pyx_t_7);
    __pyx_t_7 = 0;
+1438:             l_prior = np.sum(prior.logpdf(sample))
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_sum); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_prior, __pyx_n_s_logpdf); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
      }
    }
    __pyx_t_5 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_8, __pyx_v_sample) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_sample);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_7 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_11, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_5);
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF_SET(__pyx_v_l_prior, __pyx_t_7);
    __pyx_t_7 = 0;
+1439:             l_post = l_like + l_prior
    __pyx_t_7 = PyNumber_Add(__pyx_v_l_like, __pyx_v_l_prior); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1439, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_XDECREF_SET(__pyx_v_l_post, __pyx_t_7);
    __pyx_t_7 = 0;
+1440:             new_sample['log_posterior'] = l_post
    if (unlikely(PyObject_SetItem(__pyx_v_new_sample, __pyx_n_u_log_posterior, __pyx_v_l_post) < 0)) __PYX_ERR(0, 1440, __pyx_L1_error)
+1441:             new_sample['log_prior'] = l_prior
    if (unlikely(PyObject_SetItem(__pyx_v_new_sample, __pyx_n_u_log_prior, __pyx_v_l_prior) < 0)) __PYX_ERR(0, 1441, __pyx_L1_error)
+1442:             new_sample['log_likelihood'] = l_like
    if (unlikely(PyObject_SetItem(__pyx_v_new_sample, __pyx_n_u_log_likelihood, __pyx_v_l_like) < 0)) __PYX_ERR(0, 1442, __pyx_L1_error)
+1443:             samples.append(new_sample)
    __pyx_t_17 = __Pyx_PyList_Append(__pyx_v_samples, __pyx_v_new_sample); if (unlikely(__pyx_t_17 == ((int)-1))) __PYX_ERR(0, 1443, __pyx_L1_error)
 1444: 
+1445:         return samples
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_samples);
  __pyx_r = __pyx_v_samples;
  goto __pyx_L0;
 1446: 
+1447:     def evidence_laplace(self, x, Tf, infer_result, contactMatrix=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_49evidence_laplace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_48evidence_laplace[] = "\n        Compute the evidence using a Laplace approximation at the MAP estimate.\n\n        Parameters\n        ----------\n        x: 2d numpy.array\n            Observed trajectory (number of data points x (age groups * model classes))\n        Tf: float\n            Total time of the trajectory\n        infer_result: dict\n            Dictionary returned by latent_infer\n        contactMatrix: callable, optional\n            A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.\n            Either a contactMatrix or a generator must be specified.\n        generator: pyross.contactMatrix, optional\n            A pyross.contactMatrix object that generates a contact matrix function with specified lockdown\n            parameters.\n            Either a contactMatrix or a generator must be specified.\n        intervention_fun: callable, optional\n            The calling signature is `intervention_func(t, **kwargs)`,\n            where t is time and kwargs are other keyword arguments for the function.\n            The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.\n            The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.\n            If not set, assume intervention that's constant in time.\n            See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.\n        tangent: bool, optional\n            Set to True to use tangent space inference. Default is False.\n        eps: float or numpy.array, optional\n            Step size for finite differences computation of the hessian with respect to the parameters. Must be either a scalar, or an array of length `len(infer_result['flat_params'])`. \n            If not specified, \n            \n            .. code-block:: python\n\n               eps = 100*infer_result['flat_params'] \n                     *numpy.divide(numpy.spacing(infer_result['log_likelihood']),\n             ""        infer_result['log_likelihood'])**(0.25) \n\n            is used. For `fd_method=\"central\"` it is recommended to use a step-size greater or equal to `eps`. Decreasing the step size too small can result in round-off error.\n        fd_method: str, optional\n            The type of finite-difference scheme used to compute the hessian, supports \"forward\" and \"central\". Default is \"central\".\n        inter_steps: int, optional\n            Only used if `tangent=False`. Intermediate steps for interpolation between observations for the deterministic forward Euler integration. \n            A higher number of intermediate steps will improve the accuracy of the result, but will make computations slower. \n            Setting `inter_steps=0` will fall back to the method accessible via `det_method` for the deterministic integration. \n            We have found that forward Euler is generally slower, but more stable for derivatives with respect \n            to parameters than the variable step size integrators used elsewhere in pyross. Default is 10.\n\n        Returns\n        -------\n        log_evidence: float\n            The log-evidence computed via Laplace approximation at the MAP estimate.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_49evidence_laplace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_infer_result = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_eps = 0;
  PyObject *__pyx_v_fd_method = 0;
  PyObject *__pyx_v_inter_steps = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("evidence_laplace (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_Tf,&__pyx_n_s_infer_result,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_tangent,&__pyx_n_s_eps,&__pyx_n_s_fd_method,&__pyx_n_s_inter_steps,0};
    PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0};
    values[3] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_48evidence_laplace(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_Tf, PyObject *__pyx_v_infer_result, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_tangent, PyObject *__pyx_v_eps, PyObject *__pyx_v_fd_method, PyObject *__pyx_v_inter_steps) {
  PyObject *__pyx_v_logP_MAPs = NULL;
  PyObject *__pyx_v_A = NULL;
  PyObject *__pyx_v_k = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("evidence_laplace", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyross.inference.SIR_type.evidence_laplace", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_logP_MAPs);
  __Pyx_XDECREF(__pyx_v_A);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1448:                          generator=None,
    values[4] = ((PyObject *)Py_None);
+1449:                 intervention_fun=None, tangent=False, eps=None,
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_False);
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)__pyx_n_u_central);
    values[9] = ((PyObject *)__pyx_int_10);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("evidence_laplace", 0, 3, 10, 1); __PYX_ERR(0, 1447, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_infer_result)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("evidence_laplace", 0, 3, 10, 2); __PYX_ERR(0, 1447, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fd_method);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[9] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "evidence_laplace") < 0)) __PYX_ERR(0, 1447, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_x = values[0];
    __pyx_v_Tf = values[1];
    __pyx_v_infer_result = values[2];
    __pyx_v_contactMatrix = values[3];
    __pyx_v_generator = values[4];
    __pyx_v_intervention_fun = values[5];
    __pyx_v_tangent = values[6];
    __pyx_v_eps = values[7];
    __pyx_v_fd_method = values[8];
    __pyx_v_inter_steps = values[9];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("evidence_laplace", 0, 3, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1447, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.evidence_laplace", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_48evidence_laplace(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_x, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_eps, __pyx_v_fd_method, __pyx_v_inter_steps);
 1450:                 fd_method="central", inter_steps=10):
 1451:         """
 1452:         Compute the evidence using a Laplace approximation at the MAP estimate.
 1453: 
 1454:         Parameters
 1455:         ----------
 1456:         x: 2d numpy.array
 1457:             Observed trajectory (number of data points x (age groups * model classes))
 1458:         Tf: float
 1459:             Total time of the trajectory
 1460:         infer_result: dict
 1461:             Dictionary returned by latent_infer
 1462:         contactMatrix: callable, optional
 1463:             A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.
 1464:             Either a contactMatrix or a generator must be specified.
 1465:         generator: pyross.contactMatrix, optional
 1466:             A pyross.contactMatrix object that generates a contact matrix function with specified lockdown
 1467:             parameters.
 1468:             Either a contactMatrix or a generator must be specified.
 1469:         intervention_fun: callable, optional
 1470:             The calling signature is `intervention_func(t, **kwargs)`,
 1471:             where t is time and kwargs are other keyword arguments for the function.
 1472:             The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.
 1473:             The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.
 1474:             If not set, assume intervention that's constant in time.
 1475:             See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.
 1476:         tangent: bool, optional
 1477:             Set to True to use tangent space inference. Default is False.
 1478:         eps: float or numpy.array, optional
 1479:             Step size for finite differences computation of the hessian with respect to the parameters. Must be either a scalar, or an array of length `len(infer_result['flat_params'])`. 
 1480:             If not specified, 
 1481:             
 1482:             .. code-block:: python
 1483: 
 1484:                eps = 100*infer_result['flat_params'] 
 1485:                      *numpy.divide(numpy.spacing(infer_result['log_likelihood']),
 1486:                      infer_result['log_likelihood'])**(0.25) 
 1487: 
 1488:             is used. For `fd_method="central"` it is recommended to use a step-size greater or equal to `eps`. Decreasing the step size too small can result in round-off error.
 1489:         fd_method: str, optional
 1490:             The type of finite-difference scheme used to compute the hessian, supports "forward" and "central". Default is "central".
 1491:         inter_steps: int, optional
 1492:             Only used if `tangent=False`. Intermediate steps for interpolation between observations for the deterministic forward Euler integration. 
 1493:             A higher number of intermediate steps will improve the accuracy of the result, but will make computations slower. 
 1494:             Setting `inter_steps=0` will fall back to the method accessible via `det_method` for the deterministic integration. 
 1495:             We have found that forward Euler is generally slower, but more stable for derivatives with respect 
 1496:             to parameters than the variable step size integrators used elsewhere in pyross. Default is 10.
 1497: 
 1498:         Returns
 1499:         -------
 1500:         log_evidence: float
 1501:             The log-evidence computed via Laplace approximation at the MAP estimate.
 1502:         """
 1503: 
 1504: 
+1505:         logP_MAPs = infer_result['log_posterior']
  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_n_u_log_posterior); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_logP_MAPs = __pyx_t_1;
  __pyx_t_1 = 0;
+1506:         A = self.hessian(x, Tf, infer_result, contactMatrix, generator,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_hessian); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1506, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
 1507:                          intervention_fun, tangent, eps,
+1508:                          fd_method, inter_steps)
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[11] = {__pyx_t_3, __pyx_v_x, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_eps, __pyx_v_fd_method, __pyx_v_inter_steps};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 10+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1506, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[11] = {__pyx_t_3, __pyx_v_x, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_eps, __pyx_v_fd_method, __pyx_v_inter_steps};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 10+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1506, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(10+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1506, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_x);
    __Pyx_GIVEREF(__pyx_v_x);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_x);
    __Pyx_INCREF(__pyx_v_Tf);
    __Pyx_GIVEREF(__pyx_v_Tf);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_Tf);
    __Pyx_INCREF(__pyx_v_infer_result);
    __Pyx_GIVEREF(__pyx_v_infer_result);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_infer_result);
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_5, 4+__pyx_t_4, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_5, 5+__pyx_t_4, __pyx_v_intervention_fun);
    __Pyx_INCREF(__pyx_v_tangent);
    __Pyx_GIVEREF(__pyx_v_tangent);
    PyTuple_SET_ITEM(__pyx_t_5, 6+__pyx_t_4, __pyx_v_tangent);
    __Pyx_INCREF(__pyx_v_eps);
    __Pyx_GIVEREF(__pyx_v_eps);
    PyTuple_SET_ITEM(__pyx_t_5, 7+__pyx_t_4, __pyx_v_eps);
    __Pyx_INCREF(__pyx_v_fd_method);
    __Pyx_GIVEREF(__pyx_v_fd_method);
    PyTuple_SET_ITEM(__pyx_t_5, 8+__pyx_t_4, __pyx_v_fd_method);
    __Pyx_INCREF(__pyx_v_inter_steps);
    __Pyx_GIVEREF(__pyx_v_inter_steps);
    PyTuple_SET_ITEM(__pyx_t_5, 9+__pyx_t_4, __pyx_v_inter_steps);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1506, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_A = __pyx_t_1;
  __pyx_t_1 = 0;
+1509:         k = A.shape[0]
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_A, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_k = __pyx_t_2;
  __pyx_t_2 = 0;
 1510: 
+1511:         return logP_MAPs - 0.5*np.log(np.linalg.det(A)) + 0.5*k*np.log(2*np.pi)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_log); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_linalg); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_det); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_6, __pyx_v_A) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_A);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Multiply(__pyx_float_0_5, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Subtract(__pyx_v_logP_MAPs, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Multiply(__pyx_float_0_5, __pyx_v_k); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_log); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_pi); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Multiply(__pyx_int_2, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyNumber_Multiply(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1512: 
 1513: 
+1514:     def obtain_minus_log_p(self, parameters, np.ndarray x, double Tf, contactMatrix, tangent=False):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_51obtain_minus_log_p(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_50obtain_minus_log_p[] = "Computes -logp of a full trajectory\n        Parameters\n        ----------\n        parameters: dict\n            A dictionary for the model parameters.\n        x: np.array\n            The full trajectory.\n        Tf: float\n            The time duration of the trajectory.\n        contactMatrix: callable\n            A function that takes time (t) as an argument and returns the contactMatrix\n        tangent: bool, optional\n            Set to True to use tangent space inference.\n\n        Returns\n        -------\n        minus_logp: float\n            Value of -logp\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_51obtain_minus_log_p(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_parameters = 0;
  PyArrayObject *__pyx_v_x = 0;
  double __pyx_v_Tf;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("obtain_minus_log_p (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_parameters,&__pyx_n_s_x,&__pyx_n_s_Tf,&__pyx_n_s_contactMatrix,&__pyx_n_s_tangent,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[4] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_parameters)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("obtain_minus_log_p", 0, 4, 5, 1); __PYX_ERR(0, 1514, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("obtain_minus_log_p", 0, 4, 5, 2); __PYX_ERR(0, 1514, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("obtain_minus_log_p", 0, 4, 5, 3); __PYX_ERR(0, 1514, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "obtain_minus_log_p") < 0)) __PYX_ERR(0, 1514, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_parameters = values[0];
    __pyx_v_x = ((PyArrayObject *)values[1]);
    __pyx_v_Tf = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Tf == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1514, __pyx_L3_error)
    __pyx_v_contactMatrix = values[3];
    __pyx_v_tangent = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("obtain_minus_log_p", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1514, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.obtain_minus_log_p", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 1514, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_50obtain_minus_log_p(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_parameters, __pyx_v_x, __pyx_v_Tf, __pyx_v_contactMatrix, __pyx_v_tangent);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_50obtain_minus_log_p(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_parameters, PyArrayObject *__pyx_v_x, double __pyx_v_Tf, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_tangent) {
  __Pyx_memviewslice __pyx_v_x_memview = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_minus_logp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("obtain_minus_log_p", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.obtain_minus_log_p", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_x_memview, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1515:         """Computes -logp of a full trajectory
 1516:         Parameters
 1517:         ----------
 1518:         parameters: dict
 1519:             A dictionary for the model parameters.
 1520:         x: np.array
 1521:             The full trajectory.
 1522:         Tf: float
 1523:             The time duration of the trajectory.
 1524:         contactMatrix: callable
 1525:             A function that takes time (t) as an argument and returns the contactMatrix
 1526:         tangent: bool, optional
 1527:             Set to True to use tangent space inference.
 1528: 
 1529:         Returns
 1530:         -------
 1531:         minus_logp: float
 1532:             Value of -logp
 1533:         """
 1534: 
 1535:         cdef:
 1536:             double minus_log_p
+1537:             double [:, :] x_memview=x.astype('float')
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_x), __pyx_n_s_astype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_n_u_float) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_u_float);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 1537, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_x_memview = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
+1538:         self.set_params(parameters)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_params); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_parameters);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1539:         self.contactMatrix = contactMatrix
  __Pyx_INCREF(__pyx_v_contactMatrix);
  __Pyx_GIVEREF(__pyx_v_contactMatrix);
  __Pyx_GOTREF(__pyx_v_self->contactMatrix);
  __Pyx_DECREF(__pyx_v_self->contactMatrix);
  __pyx_v_self->contactMatrix = __pyx_v_contactMatrix;
+1540:         if tangent:
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_tangent); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1540, __pyx_L1_error)
  if (__pyx_t_5) {
/* … */
    goto __pyx_L3;
  }
+1541:             minus_logp = self._obtain_logp_for_traj_tangent(x_memview, Tf)
    __pyx_v_minus_logp = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->_obtain_logp_for_traj_tangent(__pyx_v_self, __pyx_v_x_memview, __pyx_v_Tf);
 1542:         else:
+1543:             minus_logp = self._obtain_logp_for_traj(x_memview, Tf)
  /*else*/ {
    __pyx_v_minus_logp = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->_obtain_logp_for_traj(__pyx_v_self, __pyx_v_x_memview, __pyx_v_Tf, NULL);
  }
  __pyx_L3:;
+1544:         return minus_logp
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_minus_logp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1545: 
+1546:     cdef np.ndarray _get_r_from_x(self, np.ndarray x):
static PyArrayObject *__pyx_f_6pyross_9inference_8SIR_type__get_r_from_x(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyArrayObject *__pyx_v_x) {
  PyArrayObject *__pyx_v_r = 0;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_get_r_from_x", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pyross.inference.SIR_type._get_r_from_x", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_r);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1547:         # this function will be overridden in case of extra (non-additive) compartments
 1548:         cdef:
 1549:             np.ndarray r
+1550:         r = self.fi - np.sum(x.reshape((int(self.dim/self.M), self.M)), axis=0)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sum); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_x), __pyx_n_s_reshape); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyInt_FromSsize_t((__pyx_v_self->dim / __pyx_v_self->M)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyInt_Type)), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_4);
  __pyx_t_5 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 1550, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_Subtract(((PyObject *)__pyx_v_self->fi), __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1550, __pyx_L1_error)
  __pyx_v_r = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+1551:         return r
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_r));
  __pyx_r = __pyx_v_r;
  goto __pyx_L0;
 1552: 
+1553:     cdef double _penalty_from_negative_values(self, np.ndarray x0):
static double __pyx_f_6pyross_9inference_8SIR_type__penalty_from_negative_values(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyArrayObject *__pyx_v_x0) {
  double __pyx_v_eps;
  double __pyx_v_dev;
  PyArrayObject *__pyx_v_R_init = 0;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_penalty_from_negative_values", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_WriteUnraisable("pyross.inference.SIR_type._penalty_from_negative_values", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_R_init);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1554:         cdef:
+1555:             double eps=0.1/self.Omega, dev
  __pyx_v_eps = (0.1 / __pyx_v_self->Omega);
 1556:             np.ndarray R_init
+1557:         R_init = self._get_r_from_x(x0)
  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->_get_r_from_x(__pyx_v_self, __pyx_v_x0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1557, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_R_init = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+1558:         dev = - (np.sum(R_init[R_init<0]) + np.sum(x0[x0<0]))
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sum); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_R_init), __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1558, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_R_init), __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_sum); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_x0), __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1558, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_x0), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Negative(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1558, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_dev = __pyx_t_6;
+1559:         return (dev/eps)**2 + (dev/eps)**8
  __pyx_r = (pow((__pyx_v_dev / __pyx_v_eps), 2.0) + pow((__pyx_v_dev / __pyx_v_eps), 8.0));
  goto __pyx_L0;
 1560: 
+1561:     def _all_positive(self, np.ndarray x0):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_53_all_positive(PyObject *__pyx_v_self, PyObject *__pyx_v_x0); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_53_all_positive(PyObject *__pyx_v_self, PyObject *__pyx_v_x0) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_all_positive (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x0), __pyx_ptype_5numpy_ndarray, 1, "x0", 0))) __PYX_ERR(0, 1561, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_52_all_positive(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), ((PyArrayObject *)__pyx_v_x0));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_52_all_positive(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyArrayObject *__pyx_v_x0) {
  PyArrayObject *__pyx_v_r = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_all_positive", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type._all_positive", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_r);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1562:         r = self._get_r_from_x(x0)
  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->_get_r_from_x(__pyx_v_self, __pyx_v_x0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1562, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_r = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+1563:         return (x0>0).all() and (r>0).all()
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = PyObject_RichCompare(((PyObject *)__pyx_v_x0), __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1563, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_all); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1563, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_r), __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1563, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_all); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_1 = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1564: 
+1565:     def latent_infer_parameters(self, np.ndarray obs, np.ndarray fltr, double Tf,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_55latent_infer_parameters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_54latent_infer_parameters[] = "\n        Compute the maximum a-posteriori (MAP) estimate of the parameters and the initial conditions of a SIR type model\n        when the classes are only partially observed. Unobserved classes are treated as latent variables.\n\n        Parameters\n        ----------\n            see `latent_infer`\n\n        Returns\n        -------\n        output: dict\n            Contains the following keys for users:\n\n            map_params_dict: dict\n                A dictionary for the MAP estimates for parameter values.\n                The keys are the names of the parameters.\n            map_x0: np.array\n                The MAP estimate for the initial conditions.\n            -logp: float\n                The value of -logp at MAP.\n\n        Note\n        ----\n        This function just calls latent_infer (with fixed `contactMatrix`), will be deprecated.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_55latent_infer_parameters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_obs = 0;
  PyArrayObject *__pyx_v_fltr = 0;
  double __pyx_v_Tf;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_param_priors = 0;
  PyObject *__pyx_v_init_priors = 0;
  PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_infer_parameters (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_contactMatrix,&__pyx_n_s_param_priors,&__pyx_n_s_init_priors,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_parameters", 1, 6, 6, 1); __PYX_ERR(0, 1565, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_parameters", 1, 6, 6, 2); __PYX_ERR(0, 1565, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_parameters", 1, 6, 6, 3); __PYX_ERR(0, 1565, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_parameters", 1, 6, 6, 4); __PYX_ERR(0, 1565, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_parameters", 1, 6, 6, 5); __PYX_ERR(0, 1565, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "latent_infer_parameters") < 0)) __PYX_ERR(0, 1565, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
    }
    __pyx_v_obs = ((PyArrayObject *)values[0]);
    __pyx_v_fltr = ((PyArrayObject *)values[1]);
    __pyx_v_Tf = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Tf == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1565, __pyx_L3_error)
    __pyx_v_contactMatrix = values[3];
    __pyx_v_param_priors = values[4];
    __pyx_v_init_priors = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("latent_infer_parameters", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1565, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_infer_parameters", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obs), __pyx_ptype_5numpy_ndarray, 1, "obs", 0))) __PYX_ERR(0, 1565, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fltr), __pyx_ptype_5numpy_ndarray, 1, "fltr", 0))) __PYX_ERR(0, 1565, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_54latent_infer_parameters(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_contactMatrix, __pyx_v_param_priors, __pyx_v_init_priors, __pyx_v_kwargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_54latent_infer_parameters(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyArrayObject *__pyx_v_obs, PyArrayObject *__pyx_v_fltr, double __pyx_v_Tf, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_param_priors, PyObject *__pyx_v_init_priors, PyObject *__pyx_v_kwargs) {
  PyObject *__pyx_v_output_dict = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_infer_parameters", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_infer_parameters", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_output_dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1566:                             contactMatrix, param_priors, init_priors, **kwargs):
 1567:         """
 1568:         Compute the maximum a-posteriori (MAP) estimate of the parameters and the initial conditions of a SIR type model
 1569:         when the classes are only partially observed. Unobserved classes are treated as latent variables.
 1570: 
 1571:         Parameters
 1572:         ----------
 1573:             see `latent_infer`
 1574: 
 1575:         Returns
 1576:         -------
 1577:         output: dict
 1578:             Contains the following keys for users:
 1579: 
 1580:             map_params_dict: dict
 1581:                 A dictionary for the MAP estimates for parameter values.
 1582:                 The keys are the names of the parameters.
 1583:             map_x0: np.array
 1584:                 The MAP estimate for the initial conditions.
 1585:             -logp: float
 1586:                 The value of -logp at MAP.
 1587: 
 1588:         Note
 1589:         ----
 1590:         This function just calls latent_infer (with fixed `contactMatrix`), will be deprecated.
 1591:         """
 1592: 
+1593:         output_dict = self.latent_infer(obs, fltr, Tf, param_priors, init_priors, contactMatrix=contactMatrix, generator=None,
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_latent_infer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1593, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_Tf); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1593, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1593, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)__pyx_v_obs));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_obs));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_obs));
  __Pyx_INCREF(((PyObject *)__pyx_v_fltr));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_fltr));
  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_fltr));
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2);
  __Pyx_INCREF(__pyx_v_param_priors);
  __Pyx_GIVEREF(__pyx_v_param_priors);
  PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_param_priors);
  __Pyx_INCREF(__pyx_v_init_priors);
  __Pyx_GIVEREF(__pyx_v_init_priors);
  PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_v_init_priors);
  __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1593, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_contactMatrix, __pyx_v_contactMatrix) < 0) __PYX_ERR(0, 1593, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_generator, Py_None) < 0) __PYX_ERR(0, 1593, __pyx_L1_error)
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1593, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_output_dict = __pyx_t_4;
  __pyx_t_4 = 0;
+1594:                             intervention_fun=None, **kwargs)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_intervention_fun, Py_None) < 0) __PYX_ERR(0, 1593, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_4;
  __pyx_t_4 = 0;
  if (__Pyx_MergeKeywords(__pyx_t_2, __pyx_v_kwargs) < 0) __PYX_ERR(0, 1594, __pyx_L1_error)
 1595: 
 1596:         # rename for backwards compatibility
+1597:         output_dict['map_x0'] = output_dict['x0']
  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_output_dict, __pyx_n_u_x0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1597, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(PyObject_SetItem(__pyx_v_output_dict, __pyx_n_u_map_x0, __pyx_t_4) < 0)) __PYX_ERR(0, 1597, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1598:         output_dict['flat_map'] = output_dict['flat_params']
  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_output_dict, __pyx_n_u_flat_params); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1598, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(PyObject_SetItem(__pyx_v_output_dict, __pyx_n_u_flat_map, __pyx_t_4) < 0)) __PYX_ERR(0, 1598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1599:         output_dict['map_params_dict'] = output_dict['params_dict']
  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_output_dict, __pyx_n_u_params_dict); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1599, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(PyObject_SetItem(__pyx_v_output_dict, __pyx_n_u_map_params_dict, __pyx_t_4) < 0)) __PYX_ERR(0, 1599, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 1600: 
+1601:         return output_dict
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_output_dict);
  __pyx_r = __pyx_v_output_dict;
  goto __pyx_L0;
 1602: 
 1603: 
+1604:     def nested_sampling_latent_inference(self, np.ndarray obs, np.ndarray fltr, double Tf, contactMatrix, param_priors,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_57nested_sampling_latent_inference(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_56nested_sampling_latent_inference[] = "\n        Compute the log-evidence and weighted samples of the a-posteriori distribution of the parameters of a SIR type model\n        with latent variables using nested sampling as implemented in the `dynesty` Python package.\n\n        Note\n        ----\n        This function has been replaced by `pyross.inference.latent_infer_nested_sampling` and will be deleted\n        in a future version of pyross. See there for a documentation of the function parameters.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_57nested_sampling_latent_inference(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_obs = 0;
  PyArrayObject *__pyx_v_fltr = 0;
  double __pyx_v_Tf;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_param_priors = 0;
  PyObject *__pyx_v_init_priors = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_verbose = 0;
  PyObject *__pyx_v_nprocesses = 0;
  PyObject *__pyx_v_queue_size = 0;
  PyObject *__pyx_v_maxiter = 0;
  PyObject *__pyx_v_maxcall = 0;
  PyObject *__pyx_v_dlogz = 0;
  PyObject *__pyx_v_n_effective = 0;
  PyObject *__pyx_v_add_live = 0;
  PyObject *__pyx_v_sampler = 0;
  PyObject *__pyx_v_dynesty_args = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nested_sampling_latent_inference (wrapper)", 0);
  __pyx_v_dynesty_args = PyDict_New(); if (unlikely(!__pyx_v_dynesty_args)) return NULL;
  __Pyx_GOTREF(__pyx_v_dynesty_args);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_contactMatrix,&__pyx_n_s_param_priors,&__pyx_n_s_init_priors,&__pyx_n_s_tangent,&__pyx_n_s_verbose,&__pyx_n_s_nprocesses,&__pyx_n_s_queue_size,&__pyx_n_s_maxiter,&__pyx_n_s_maxcall,&__pyx_n_s_dlogz,&__pyx_n_s_n_effective,&__pyx_n_s_add_live,&__pyx_n_s_sampler,0};
    PyObject* values[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dynesty_args);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_56nested_sampling_latent_inference(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyArrayObject *__pyx_v_obs, PyArrayObject *__pyx_v_fltr, double __pyx_v_Tf, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_param_priors, PyObject *__pyx_v_init_priors, PyObject *__pyx_v_tangent, PyObject *__pyx_v_verbose, PyObject *__pyx_v_nprocesses, PyObject *__pyx_v_queue_size, PyObject *__pyx_v_maxiter, PyObject *__pyx_v_maxcall, PyObject *__pyx_v_dlogz, PyObject *__pyx_v_n_effective, PyObject *__pyx_v_add_live, PyObject *__pyx_v_sampler, PyObject *__pyx_v_dynesty_args) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nested_sampling_latent_inference", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.nested_sampling_latent_inference", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1605:                                          init_priors,tangent=False, verbose=False, nprocesses=0, queue_size=None,
    values[6] = ((PyObject *)Py_False);
    values[7] = ((PyObject *)Py_False);
    values[8] = ((PyObject *)__pyx_int_0);
    values[9] = ((PyObject *)Py_None);
+1606:                                          maxiter=None, maxcall=None, dlogz=None, n_effective=None, add_live=True,
    values[10] = ((PyObject *)Py_None);
    values[11] = ((PyObject *)Py_None);
    values[12] = ((PyObject *)Py_None);
    values[13] = ((PyObject *)Py_None);
    values[14] = ((PyObject *)Py_True);
+1607:                                          sampler=None, **dynesty_args):
    values[15] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("nested_sampling_latent_inference", 0, 6, 16, 1); __PYX_ERR(0, 1604, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("nested_sampling_latent_inference", 0, 6, 16, 2); __PYX_ERR(0, 1604, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("nested_sampling_latent_inference", 0, 6, 16, 3); __PYX_ERR(0, 1604, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("nested_sampling_latent_inference", 0, 6, 16, 4); __PYX_ERR(0, 1604, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("nested_sampling_latent_inference", 0, 6, 16, 5); __PYX_ERR(0, 1604, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_verbose);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nprocesses);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_queue_size);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxiter);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxcall);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dlogz);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_effective);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_add_live);
          if (value) { values[14] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 15:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sampler);
          if (value) { values[15] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_dynesty_args, values, pos_args, "nested_sampling_latent_inference") < 0)) __PYX_ERR(0, 1604, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obs = ((PyArrayObject *)values[0]);
    __pyx_v_fltr = ((PyArrayObject *)values[1]);
    __pyx_v_Tf = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Tf == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1604, __pyx_L3_error)
    __pyx_v_contactMatrix = values[3];
    __pyx_v_param_priors = values[4];
    __pyx_v_init_priors = values[5];
    __pyx_v_tangent = values[6];
    __pyx_v_verbose = values[7];
    __pyx_v_nprocesses = values[8];
    __pyx_v_queue_size = values[9];
    __pyx_v_maxiter = values[10];
    __pyx_v_maxcall = values[11];
    __pyx_v_dlogz = values[12];
    __pyx_v_n_effective = values[13];
    __pyx_v_add_live = values[14];
    __pyx_v_sampler = values[15];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("nested_sampling_latent_inference", 0, 6, 16, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1604, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_dynesty_args); __pyx_v_dynesty_args = 0;
  __Pyx_AddTraceback("pyross.inference.SIR_type.nested_sampling_latent_inference", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obs), __pyx_ptype_5numpy_ndarray, 1, "obs", 0))) __PYX_ERR(0, 1604, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fltr), __pyx_ptype_5numpy_ndarray, 1, "fltr", 0))) __PYX_ERR(0, 1604, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_56nested_sampling_latent_inference(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_contactMatrix, __pyx_v_param_priors, __pyx_v_init_priors, __pyx_v_tangent, __pyx_v_verbose, __pyx_v_nprocesses, __pyx_v_queue_size, __pyx_v_maxiter, __pyx_v_maxcall, __pyx_v_dlogz, __pyx_v_n_effective, __pyx_v_add_live, __pyx_v_sampler, __pyx_v_dynesty_args);
 1608:         """
 1609:         Compute the log-evidence and weighted samples of the a-posteriori distribution of the parameters of a SIR type model
 1610:         with latent variables using nested sampling as implemented in the `dynesty` Python package.
 1611: 
 1612:         Note
 1613:         ----
 1614:         This function has been replaced by `pyross.inference.latent_infer_nested_sampling` and will be deleted
 1615:         in a future version of pyross. See there for a documentation of the function parameters.
 1616:         """
+1617:         return self.latent_infer_nested_sampling(obs, fltr, Tf, param_priors, init_priors, contactMatrix=contactMatrix,
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_latent_infer_nested_sampling); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_Tf); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)__pyx_v_obs));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_obs));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_obs));
  __Pyx_INCREF(((PyObject *)__pyx_v_fltr));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_fltr));
  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_fltr));
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2);
  __Pyx_INCREF(__pyx_v_param_priors);
  __Pyx_GIVEREF(__pyx_v_param_priors);
  PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_param_priors);
  __Pyx_INCREF(__pyx_v_init_priors);
  __Pyx_GIVEREF(__pyx_v_init_priors);
  PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_v_init_priors);
  __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_contactMatrix, __pyx_v_contactMatrix) < 0) __PYX_ERR(0, 1617, __pyx_L1_error)
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
+1618:                                                  generator=None, intervention_fun=None, tangent=tangent, verbose=verbose,
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_generator, Py_None) < 0) __PYX_ERR(0, 1617, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_intervention_fun, Py_None) < 0) __PYX_ERR(0, 1617, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_tangent, __pyx_v_tangent) < 0) __PYX_ERR(0, 1617, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_verbose, __pyx_v_verbose) < 0) __PYX_ERR(0, 1617, __pyx_L1_error)
+1619:                                                  nprocesses=nprocesses, queue_size=queue_size, maxiter=maxiter, maxcall=maxcall,
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_nprocesses, __pyx_v_nprocesses) < 0) __PYX_ERR(0, 1617, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_queue_size, __pyx_v_queue_size) < 0) __PYX_ERR(0, 1617, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_maxiter, __pyx_v_maxiter) < 0) __PYX_ERR(0, 1617, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_maxcall, __pyx_v_maxcall) < 0) __PYX_ERR(0, 1617, __pyx_L1_error)
+1620:                                                  dlogz=dlogz, n_effective=n_effective, add_live=add_live, sampler=sampler,
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dlogz, __pyx_v_dlogz) < 0) __PYX_ERR(0, 1617, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_n_effective, __pyx_v_n_effective) < 0) __PYX_ERR(0, 1617, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_add_live, __pyx_v_add_live) < 0) __PYX_ERR(0, 1617, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_sampler, __pyx_v_sampler) < 0) __PYX_ERR(0, 1617, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_4;
  __pyx_t_4 = 0;
+1621:                                                  **dynesty_args )
  if (__Pyx_MergeKeywords(__pyx_t_2, __pyx_v_dynesty_args) < 0) __PYX_ERR(0, 1621, __pyx_L1_error)
 1622: 
+1623:     def nested_sampling_latent_inference_process_result(self, sampler, obs, fltr, param_priors, init_priors):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_59nested_sampling_latent_inference_process_result(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_58nested_sampling_latent_inference_process_result[] = "\n        Take the sampler generated by `nested_sampling_latent_inference` and produce output dictionaries for further use\n        in the pyross framework.\n\n        Note\n        ----\n        This function has been replaced by `pyross.inference.latent_infer_nested_sampling_process_result` and will be\n        deleted in a future version of pyross. See there for a documentation of the function parameters.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_59nested_sampling_latent_inference_process_result(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sampler = 0;
  PyObject *__pyx_v_obs = 0;
  PyObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_param_priors = 0;
  PyObject *__pyx_v_init_priors = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nested_sampling_latent_inference_process_result (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sampler,&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_param_priors,&__pyx_n_s_init_priors,0};
    PyObject* values[5] = {0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sampler)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("nested_sampling_latent_inference_process_result", 1, 5, 5, 1); __PYX_ERR(0, 1623, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("nested_sampling_latent_inference_process_result", 1, 5, 5, 2); __PYX_ERR(0, 1623, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("nested_sampling_latent_inference_process_result", 1, 5, 5, 3); __PYX_ERR(0, 1623, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("nested_sampling_latent_inference_process_result", 1, 5, 5, 4); __PYX_ERR(0, 1623, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "nested_sampling_latent_inference_process_result") < 0)) __PYX_ERR(0, 1623, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
    }
    __pyx_v_sampler = values[0];
    __pyx_v_obs = values[1];
    __pyx_v_fltr = values[2];
    __pyx_v_param_priors = values[3];
    __pyx_v_init_priors = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("nested_sampling_latent_inference_process_result", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1623, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.nested_sampling_latent_inference_process_result", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_58nested_sampling_latent_inference_process_result(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_sampler, __pyx_v_obs, __pyx_v_fltr, __pyx_v_param_priors, __pyx_v_init_priors);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_58nested_sampling_latent_inference_process_result(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_sampler, PyObject *__pyx_v_obs, PyObject *__pyx_v_fltr, PyObject *__pyx_v_param_priors, PyObject *__pyx_v_init_priors) {
  PyObject *__pyx_v_result = NULL;
  PyObject *__pyx_v_output_samples = NULL;
  PyObject *__pyx_v_out_dict = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("nested_sampling_latent_inference_process_result", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.nested_sampling_latent_inference_process_result", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XDECREF(__pyx_v_output_samples);
  __Pyx_XDECREF(__pyx_v_out_dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1624:         """
 1625:         Take the sampler generated by `nested_sampling_latent_inference` and produce output dictionaries for further use
 1626:         in the pyross framework.
 1627: 
 1628:         Note
 1629:         ----
 1630:         This function has been replaced by `pyross.inference.latent_infer_nested_sampling_process_result` and will be
 1631:         deleted in a future version of pyross. See there for a documentation of the function parameters.
 1632:         """
+1633:         result, output_samples = self.latent_infer_nested_sampling_process_result(sampler, obs, fltr, param_priors, init_priors,
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_latent_infer_nested_sampling_pro); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1633, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1633, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_sampler);
  __Pyx_GIVEREF(__pyx_v_sampler);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_sampler);
  __Pyx_INCREF(__pyx_v_obs);
  __Pyx_GIVEREF(__pyx_v_obs);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_obs);
  __Pyx_INCREF(__pyx_v_fltr);
  __Pyx_GIVEREF(__pyx_v_fltr);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_fltr);
  __Pyx_INCREF(__pyx_v_param_priors);
  __Pyx_GIVEREF(__pyx_v_param_priors);
  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_param_priors);
  __Pyx_INCREF(__pyx_v_init_priors);
  __Pyx_GIVEREF(__pyx_v_init_priors);
  PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_v_init_priors);
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1633, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
    PyObject* sequence = __pyx_t_4;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1633, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1633, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1633, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1633, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_5(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_2 = __pyx_t_5(__pyx_t_1); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_1), 2) < 0) __PYX_ERR(0, 1633, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1633, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_result = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_output_samples = __pyx_t_2;
  __pyx_t_2 = 0;
+1634:                                                                                   contactMatrix=self.contactMatrix)
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_contactMatrix, __pyx_v_self->contactMatrix) < 0) __PYX_ERR(0, 1634, __pyx_L1_error)
 1635: 
 1636:         # Match old dictionary key names for backward compatibility.
+1637:         for out_dict in output_samples:
  if (likely(PyList_CheckExact(__pyx_v_output_samples)) || PyTuple_CheckExact(__pyx_v_output_samples)) {
    __pyx_t_4 = __pyx_v_output_samples; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
  } else {
    __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_output_samples); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1637, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1637, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_7)) {
      if (likely(PyList_CheckExact(__pyx_t_4))) {
        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1637, __pyx_L1_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1637, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      } else {
        if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1637, __pyx_L1_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1637, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      }
    } else {
      __pyx_t_2 = __pyx_t_7(__pyx_t_4);
      if (unlikely(!__pyx_t_2)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1637, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_XDECREF_SET(__pyx_v_out_dict, __pyx_t_2);
    __pyx_t_2 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1638:             out_dict['map_x0']          = out_dict.pop('x0')
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out_dict, __pyx_n_s_pop); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1638, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_n_u_x0) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_n_u_x0);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1638, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_out_dict, __pyx_n_u_map_x0, __pyx_t_2) < 0)) __PYX_ERR(0, 1638, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1639:             out_dict['flat_map']        = out_dict.pop('flat_params')
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out_dict, __pyx_n_s_pop); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1639, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_n_u_flat_params) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_n_u_flat_params);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1639, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_out_dict, __pyx_n_u_flat_map, __pyx_t_2) < 0)) __PYX_ERR(0, 1639, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1640:             out_dict['map_params_dict'] = out_dict.pop('params_dict')
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out_dict, __pyx_n_s_pop); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_n_u_params_dict) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_n_u_params_dict);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_out_dict, __pyx_n_u_map_params_dict, __pyx_t_2) < 0)) __PYX_ERR(0, 1640, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 1641: 
+1642:         return result, output_samples
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1642, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_v_result);
  __Pyx_GIVEREF(__pyx_v_result);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_result);
  __Pyx_INCREF(__pyx_v_output_samples);
  __Pyx_GIVEREF(__pyx_v_output_samples);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_output_samples);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 1643: 
 1644: 
+1645:     def mcmc_latent_inference(self, np.ndarray obs, np.ndarray fltr, double Tf, contactMatrix, param_priors,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_61mcmc_latent_inference(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_60mcmc_latent_inference[] = "\n        Sample the posterior distribution of the epidemiological parameters using ensemble MCMC.\n\n        Note\n        ----\n        This function has been replaced by `pyross.inference.latent_infer_mcmc` and will be deleted\n        in a future version of pyross. See there for a documentation of the function parameters.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_61mcmc_latent_inference(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_obs = 0;
  PyArrayObject *__pyx_v_fltr = 0;
  double __pyx_v_Tf;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_param_priors = 0;
  PyObject *__pyx_v_init_priors = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_verbose = 0;
  PyObject *__pyx_v_sampler = 0;
  PyObject *__pyx_v_nwalkers = 0;
  PyObject *__pyx_v_walker_pos = 0;
  PyObject *__pyx_v_nsamples = 0;
  PyObject *__pyx_v_nprocesses = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mcmc_latent_inference (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_contactMatrix,&__pyx_n_s_param_priors,&__pyx_n_s_init_priors,&__pyx_n_s_tangent,&__pyx_n_s_verbose,&__pyx_n_s_sampler,&__pyx_n_s_nwalkers,&__pyx_n_s_walker_pos,&__pyx_n_s_nsamples,&__pyx_n_s_nprocesses,0};
    PyObject* values[13] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_60mcmc_latent_inference(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyArrayObject *__pyx_v_obs, PyArrayObject *__pyx_v_fltr, double __pyx_v_Tf, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_param_priors, PyObject *__pyx_v_init_priors, PyObject *__pyx_v_tangent, PyObject *__pyx_v_verbose, PyObject *__pyx_v_sampler, PyObject *__pyx_v_nwalkers, PyObject *__pyx_v_walker_pos, PyObject *__pyx_v_nsamples, PyObject *__pyx_v_nprocesses) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mcmc_latent_inference", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.mcmc_latent_inference", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1646:                               init_priors, tangent=False, verbose=False, sampler=None, nwalkers=None, walker_pos=None,
    values[6] = ((PyObject *)Py_False);
    values[7] = ((PyObject *)Py_False);
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject *)Py_None);
    values[10] = ((PyObject *)Py_None);
    values[11] = ((PyObject *)__pyx_int_1000);
    values[12] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mcmc_latent_inference", 0, 6, 13, 1); __PYX_ERR(0, 1645, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mcmc_latent_inference", 0, 6, 13, 2); __PYX_ERR(0, 1645, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mcmc_latent_inference", 0, 6, 13, 3); __PYX_ERR(0, 1645, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mcmc_latent_inference", 0, 6, 13, 4); __PYX_ERR(0, 1645, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mcmc_latent_inference", 0, 6, 13, 5); __PYX_ERR(0, 1645, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_verbose);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sampler);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nwalkers);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_walker_pos);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nsamples);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nprocesses);
          if (value) { values[12] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mcmc_latent_inference") < 0)) __PYX_ERR(0, 1645, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obs = ((PyArrayObject *)values[0]);
    __pyx_v_fltr = ((PyArrayObject *)values[1]);
    __pyx_v_Tf = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Tf == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1645, __pyx_L3_error)
    __pyx_v_contactMatrix = values[3];
    __pyx_v_param_priors = values[4];
    __pyx_v_init_priors = values[5];
    __pyx_v_tangent = values[6];
    __pyx_v_verbose = values[7];
    __pyx_v_sampler = values[8];
    __pyx_v_nwalkers = values[9];
    __pyx_v_walker_pos = values[10];
    __pyx_v_nsamples = values[11];
    __pyx_v_nprocesses = values[12];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("mcmc_latent_inference", 0, 6, 13, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1645, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.mcmc_latent_inference", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obs), __pyx_ptype_5numpy_ndarray, 1, "obs", 0))) __PYX_ERR(0, 1645, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fltr), __pyx_ptype_5numpy_ndarray, 1, "fltr", 0))) __PYX_ERR(0, 1645, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_60mcmc_latent_inference(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_contactMatrix, __pyx_v_param_priors, __pyx_v_init_priors, __pyx_v_tangent, __pyx_v_verbose, __pyx_v_sampler, __pyx_v_nwalkers, __pyx_v_walker_pos, __pyx_v_nsamples, __pyx_v_nprocesses);
 1647:                               nsamples=1000, nprocesses=0):
 1648:         """
 1649:         Sample the posterior distribution of the epidemiological parameters using ensemble MCMC.
 1650: 
 1651:         Note
 1652:         ----
 1653:         This function has been replaced by `pyross.inference.latent_infer_mcmc` and will be deleted
 1654:         in a future version of pyross. See there for a documentation of the function parameters.
 1655:         """
+1656:         return self.latent_infer_mcmc(obs, fltr, Tf, param_priors, init_priors, contactMatrix=contactMatrix,
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_latent_infer_mcmc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1656, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_Tf); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1656, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1656, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)__pyx_v_obs));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_obs));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_obs));
  __Pyx_INCREF(((PyObject *)__pyx_v_fltr));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_fltr));
  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_fltr));
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2);
  __Pyx_INCREF(__pyx_v_param_priors);
  __Pyx_GIVEREF(__pyx_v_param_priors);
  PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_param_priors);
  __Pyx_INCREF(__pyx_v_init_priors);
  __Pyx_GIVEREF(__pyx_v_init_priors);
  PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_v_init_priors);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1656, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_contactMatrix, __pyx_v_contactMatrix) < 0) __PYX_ERR(0, 1656, __pyx_L1_error)
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1656, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
+1657:                                       generator=None, intervention_fun=None, tangent=tangent, verbose=verbose,
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_generator, Py_None) < 0) __PYX_ERR(0, 1656, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_intervention_fun, Py_None) < 0) __PYX_ERR(0, 1656, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_tangent, __pyx_v_tangent) < 0) __PYX_ERR(0, 1656, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_verbose, __pyx_v_verbose) < 0) __PYX_ERR(0, 1656, __pyx_L1_error)
+1658:                                       sampler=sampler, nwalkers=nwalkers, walker_pos=walker_pos,
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_sampler, __pyx_v_sampler) < 0) __PYX_ERR(0, 1656, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_nwalkers, __pyx_v_nwalkers) < 0) __PYX_ERR(0, 1656, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_walker_pos, __pyx_v_walker_pos) < 0) __PYX_ERR(0, 1656, __pyx_L1_error)
+1659:                                       nsamples=nsamples, nprocesses=nprocesses)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_nsamples, __pyx_v_nsamples) < 0) __PYX_ERR(0, 1656, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_nprocesses, __pyx_v_nprocesses) < 0) __PYX_ERR(0, 1656, __pyx_L1_error)
 1660: 
+1661:     def mcmc_latent_inference_process_result(self, sampler, obs, fltr, param_priors, init_priors,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_63mcmc_latent_inference_process_result(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_62mcmc_latent_inference_process_result[] = "\n        Take the sampler generated by `mcmc_latent_inference` and produce output dictionaries for further use\n        in the pyross framework.\n\n        Note\n        ----\n        This function has been replaced by `pyross.inference.latent_infer_mcmc_process_results` and will be deleted\n        in a future version of pyross. See there for a documentation of the function parameters.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_63mcmc_latent_inference_process_result(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sampler = 0;
  PyObject *__pyx_v_obs = 0;
  PyObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_param_priors = 0;
  PyObject *__pyx_v_init_priors = 0;
  PyObject *__pyx_v_flat = 0;
  PyObject *__pyx_v_discard = 0;
  PyObject *__pyx_v_thin = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mcmc_latent_inference_process_result (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sampler,&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_param_priors,&__pyx_n_s_init_priors,&__pyx_n_s_flat,&__pyx_n_s_discard,&__pyx_n_s_thin,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_62mcmc_latent_inference_process_result(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_sampler, PyObject *__pyx_v_obs, PyObject *__pyx_v_fltr, PyObject *__pyx_v_param_priors, PyObject *__pyx_v_init_priors, PyObject *__pyx_v_flat, PyObject *__pyx_v_discard, PyObject *__pyx_v_thin) {
  PyObject *__pyx_v_output_samples = NULL;
  PyObject *__pyx_v_flat_sample_list = NULL;
  PyObject *__pyx_v_out_dict = NULL;
  PyObject *__pyx_8genexpr2__pyx_v_sublist = NULL;
  PyObject *__pyx_8genexpr2__pyx_v_item = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mcmc_latent_inference_process_result", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.mcmc_latent_inference_process_result", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_output_samples);
  __Pyx_XDECREF(__pyx_v_flat_sample_list);
  __Pyx_XDECREF(__pyx_v_out_dict);
  __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_sublist);
  __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_item);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1662:                                             flat=True, discard=0, thin=1):
    values[5] = ((PyObject *)Py_True);
    values[6] = ((PyObject *)__pyx_int_0);
    values[7] = ((PyObject *)__pyx_int_1);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sampler)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mcmc_latent_inference_process_result", 0, 5, 8, 1); __PYX_ERR(0, 1661, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mcmc_latent_inference_process_result", 0, 5, 8, 2); __PYX_ERR(0, 1661, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mcmc_latent_inference_process_result", 0, 5, 8, 3); __PYX_ERR(0, 1661, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("mcmc_latent_inference_process_result", 0, 5, 8, 4); __PYX_ERR(0, 1661, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flat);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_discard);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_thin);
          if (value) { values[7] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mcmc_latent_inference_process_result") < 0)) __PYX_ERR(0, 1661, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sampler = values[0];
    __pyx_v_obs = values[1];
    __pyx_v_fltr = values[2];
    __pyx_v_param_priors = values[3];
    __pyx_v_init_priors = values[4];
    __pyx_v_flat = values[5];
    __pyx_v_discard = values[6];
    __pyx_v_thin = values[7];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("mcmc_latent_inference_process_result", 0, 5, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1661, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.mcmc_latent_inference_process_result", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_62mcmc_latent_inference_process_result(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_sampler, __pyx_v_obs, __pyx_v_fltr, __pyx_v_param_priors, __pyx_v_init_priors, __pyx_v_flat, __pyx_v_discard, __pyx_v_thin);
 1663:         """
 1664:         Take the sampler generated by `mcmc_latent_inference` and produce output dictionaries for further use
 1665:         in the pyross framework.
 1666: 
 1667:         Note
 1668:         ----
 1669:         This function has been replaced by `pyross.inference.latent_infer_mcmc_process_results` and will be deleted
 1670:         in a future version of pyross. See there for a documentation of the function parameters.
 1671:         """
+1672:         output_samples = self.latent_infer_mcmc_process_result(sampler, obs, fltr, param_priors, init_priors,
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_latent_infer_mcmc_process_result); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1672, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1672, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_sampler);
  __Pyx_GIVEREF(__pyx_v_sampler);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_sampler);
  __Pyx_INCREF(__pyx_v_obs);
  __Pyx_GIVEREF(__pyx_v_obs);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_obs);
  __Pyx_INCREF(__pyx_v_fltr);
  __Pyx_GIVEREF(__pyx_v_fltr);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_fltr);
  __Pyx_INCREF(__pyx_v_param_priors);
  __Pyx_GIVEREF(__pyx_v_param_priors);
  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_param_priors);
  __Pyx_INCREF(__pyx_v_init_priors);
  __Pyx_GIVEREF(__pyx_v_init_priors);
  PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_v_init_priors);
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1672, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_output_samples = __pyx_t_4;
  __pyx_t_4 = 0;
+1673:                                                                contactMatrix=self.contactMatrix, flat=flat,
  __pyx_t_3 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1673, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_contactMatrix, __pyx_v_self->contactMatrix) < 0) __PYX_ERR(0, 1673, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_flat, __pyx_v_flat) < 0) __PYX_ERR(0, 1673, __pyx_L1_error)
+1674:                                                                discard=discard, thin=thin)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_discard, __pyx_v_discard) < 0) __PYX_ERR(0, 1673, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_thin, __pyx_v_thin) < 0) __PYX_ERR(0, 1673, __pyx_L1_error)
 1675: 
 1676:         # Match old dictionary key names for backward compatibility.
+1677:         if flat:
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_flat); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1677, __pyx_L1_error)
  if (__pyx_t_5) {
/* … */
    goto __pyx_L3;
  }
+1678:             flat_sample_list = output_samples
    __Pyx_INCREF(__pyx_v_output_samples);
    __pyx_v_flat_sample_list = __pyx_v_output_samples;
 1679:         else:
+1680:             flat_sample_list = [item for sublist in output_samples for item in sublist]
  /*else*/ {
    { /* enter inner scope */
      __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1680, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (likely(PyList_CheckExact(__pyx_v_output_samples)) || PyTuple_CheckExact(__pyx_v_output_samples)) {
        __pyx_t_3 = __pyx_v_output_samples; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
        __pyx_t_7 = NULL;
      } else {
        __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_output_samples); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1680, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1680, __pyx_L6_error)
      }
      for (;;) {
        if (likely(!__pyx_t_7)) {
          if (likely(PyList_CheckExact(__pyx_t_3))) {
            if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1680, __pyx_L6_error)
            #else
            __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1680, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_2);
            #endif
          } else {
            if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1680, __pyx_L6_error)
            #else
            __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1680, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_2);
            #endif
          }
        } else {
          __pyx_t_2 = __pyx_t_7(__pyx_t_3);
          if (unlikely(!__pyx_t_2)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 1680, __pyx_L6_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_2);
        }
        __Pyx_XDECREF_SET(__pyx_8genexpr2__pyx_v_sublist, __pyx_t_2);
        __pyx_t_2 = 0;
        if (likely(PyList_CheckExact(__pyx_8genexpr2__pyx_v_sublist)) || PyTuple_CheckExact(__pyx_8genexpr2__pyx_v_sublist)) {
          __pyx_t_2 = __pyx_8genexpr2__pyx_v_sublist; __Pyx_INCREF(__pyx_t_2); __pyx_t_8 = 0;
          __pyx_t_9 = NULL;
        } else {
          __pyx_t_8 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_8genexpr2__pyx_v_sublist); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1680, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_9 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1680, __pyx_L6_error)
        }
        for (;;) {
          if (likely(!__pyx_t_9)) {
            if (likely(PyList_CheckExact(__pyx_t_2))) {
              if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_2)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1680, __pyx_L6_error)
              #else
              __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1680, __pyx_L6_error)
              __Pyx_GOTREF(__pyx_t_1);
              #endif
            } else {
              if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_1); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 1680, __pyx_L6_error)
              #else
              __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1680, __pyx_L6_error)
              __Pyx_GOTREF(__pyx_t_1);
              #endif
            }
          } else {
            __pyx_t_1 = __pyx_t_9(__pyx_t_2);
            if (unlikely(!__pyx_t_1)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 1680, __pyx_L6_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_1);
          }
          __Pyx_XDECREF_SET(__pyx_8genexpr2__pyx_v_item, __pyx_t_1);
          __pyx_t_1 = 0;
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_8genexpr2__pyx_v_item))) __PYX_ERR(0, 1680, __pyx_L6_error)
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_item); __pyx_8genexpr2__pyx_v_item = 0;
      __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_sublist); __pyx_8genexpr2__pyx_v_sublist = 0;
      goto __pyx_L11_exit_scope;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_item); __pyx_8genexpr2__pyx_v_item = 0;
      __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_sublist); __pyx_8genexpr2__pyx_v_sublist = 0;
      goto __pyx_L1_error;
      __pyx_L11_exit_scope:;
    } /* exit inner scope */
    __pyx_v_flat_sample_list = __pyx_t_4;
    __pyx_t_4 = 0;
  }
  __pyx_L3:;
+1681:         for out_dict in flat_sample_list:
  if (likely(PyList_CheckExact(__pyx_v_flat_sample_list)) || PyTuple_CheckExact(__pyx_v_flat_sample_list)) {
    __pyx_t_4 = __pyx_v_flat_sample_list; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
  } else {
    __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_flat_sample_list); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1681, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1681, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_7)) {
      if (likely(PyList_CheckExact(__pyx_t_4))) {
        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1681, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1681, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1681, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1681, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_7(__pyx_t_4);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1681, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF_SET(__pyx_v_out_dict, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1682:             out_dict['map_x0']          = out_dict.pop('x0')
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out_dict, __pyx_n_s_pop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1682, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_n_u_x0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_u_x0);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1682, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_out_dict, __pyx_n_u_map_x0, __pyx_t_3) < 0)) __PYX_ERR(0, 1682, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1683:             out_dict['flat_map']        = out_dict.pop('flat_params')
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out_dict, __pyx_n_s_pop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_n_u_flat_params) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_u_flat_params);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_out_dict, __pyx_n_u_flat_map, __pyx_t_3) < 0)) __PYX_ERR(0, 1683, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1684:             out_dict['map_params_dict'] = out_dict.pop('params_dict')
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out_dict, __pyx_n_s_pop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1684, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_n_u_params_dict) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_u_params_dict);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1684, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_out_dict, __pyx_n_u_map_params_dict, __pyx_t_3) < 0)) __PYX_ERR(0, 1684, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 1685: 
+1686:         return output_samples
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_output_samples);
  __pyx_r = __pyx_v_output_samples;
  goto __pyx_L0;
 1687: 
 1688: 
+1689:     def latent_infer_control(self, obs, fltr, Tf, generator, param_priors, init_priors,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_65latent_infer_control(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_64latent_infer_control[] = "\n        Compute the maximum a-posteriori (MAP) estimate of the change of control parameters for a SIR type model in\n        lockdown with partially observed classes.\n\n        Parameters\n        ----------\n            see `latent_infer`\n\n        Returns\n        -------\n        output_dict: dict\n            A dictionary containing the following keys for users:\n\n            map_params_dict: dict\n                dictionary for MAP estimates for control parameters\n            map_x0: np.array\n                MAP estimates for the initial conditions\n            -logp: float\n                Value of -logp at MAP.\n\n        Note\n        ----\n        This function just calls `latent_infer` (with the specified `generator`), will be deprecated.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_65latent_infer_control(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_obs = 0;
  PyObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_param_priors = 0;
  PyObject *__pyx_v_init_priors = 0;
  PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_infer_control (wrapper)", 0);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_generator,&__pyx_n_s_param_priors,&__pyx_n_s_init_priors,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_control", 1, 6, 6, 1); __PYX_ERR(0, 1689, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_control", 1, 6, 6, 2); __PYX_ERR(0, 1689, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_control", 1, 6, 6, 3); __PYX_ERR(0, 1689, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_control", 1, 6, 6, 4); __PYX_ERR(0, 1689, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_control", 1, 6, 6, 5); __PYX_ERR(0, 1689, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "latent_infer_control") < 0)) __PYX_ERR(0, 1689, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
    }
    __pyx_v_obs = values[0];
    __pyx_v_fltr = values[1];
    __pyx_v_Tf = values[2];
    __pyx_v_generator = values[3];
    __pyx_v_param_priors = values[4];
    __pyx_v_init_priors = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("latent_infer_control", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1689, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_infer_control", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_64latent_infer_control(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_generator, __pyx_v_param_priors, __pyx_v_init_priors, __pyx_v_kwargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_64latent_infer_control(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_obs, PyObject *__pyx_v_fltr, PyObject *__pyx_v_Tf, PyObject *__pyx_v_generator, PyObject *__pyx_v_param_priors, PyObject *__pyx_v_init_priors, PyObject *__pyx_v_kwargs) {
  PyObject *__pyx_v_output_dict = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_infer_control", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_infer_control", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_output_dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1690:                             **kwargs):
 1691:         """
 1692:         Compute the maximum a-posteriori (MAP) estimate of the change of control parameters for a SIR type model in
 1693:         lockdown with partially observed classes.
 1694: 
 1695:         Parameters
 1696:         ----------
 1697:             see `latent_infer`
 1698: 
 1699:         Returns
 1700:         -------
 1701:         output_dict: dict
 1702:             A dictionary containing the following keys for users:
 1703: 
 1704:             map_params_dict: dict
 1705:                 dictionary for MAP estimates for control parameters
 1706:             map_x0: np.array
 1707:                 MAP estimates for the initial conditions
 1708:             -logp: float
 1709:                 Value of -logp at MAP.
 1710: 
 1711:         Note
 1712:         ----
 1713:         This function just calls `latent_infer` (with the specified `generator`), will be deprecated.
 1714:         """
 1715: 
+1716:         output_dict = self.latent_infer(obs, fltr, Tf, param_priors, init_priors,
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_latent_infer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_obs);
  __Pyx_GIVEREF(__pyx_v_obs);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_obs);
  __Pyx_INCREF(__pyx_v_fltr);
  __Pyx_GIVEREF(__pyx_v_fltr);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_fltr);
  __Pyx_INCREF(__pyx_v_Tf);
  __Pyx_GIVEREF(__pyx_v_Tf);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_Tf);
  __Pyx_INCREF(__pyx_v_param_priors);
  __Pyx_GIVEREF(__pyx_v_param_priors);
  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_param_priors);
  __Pyx_INCREF(__pyx_v_init_priors);
  __Pyx_GIVEREF(__pyx_v_init_priors);
  PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_v_init_priors);
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_output_dict = __pyx_t_4;
  __pyx_t_4 = 0;
+1717:                                         contactMatrix=None, generator=generator,
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1717, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_contactMatrix, Py_None) < 0) __PYX_ERR(0, 1717, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_generator, __pyx_v_generator) < 0) __PYX_ERR(0, 1717, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_4;
  __pyx_t_4 = 0;
+1718:                                         **kwargs)
  if (__Pyx_MergeKeywords(__pyx_t_3, __pyx_v_kwargs) < 0) __PYX_ERR(0, 1718, __pyx_L1_error)
+1719:         del output_dict['params_dict']
  if (unlikely(PyObject_DelItem(__pyx_v_output_dict, __pyx_n_u_params_dict) < 0)) __PYX_ERR(0, 1719, __pyx_L1_error)
+1720:         output_dict['map_params_dict']=output_dict['control_params_dict']  # Rename entry for backwards compatibility
  __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_output_dict, __pyx_n_u_control_params_dict); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1720, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(PyObject_SetItem(__pyx_v_output_dict, __pyx_n_u_map_params_dict, __pyx_t_4) < 0)) __PYX_ERR(0, 1720, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 1721: 
+1722:         return output_dict
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_output_dict);
  __pyx_r = __pyx_v_output_dict;
  goto __pyx_L0;
 1723: 
+1724:     def _loglikelihood_latent(self, params, grad=0, generator=None, intervention_fun=None, param_keys=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_67_loglikelihood_latent(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_67_loglikelihood_latent(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_params = 0;
  CYTHON_UNUSED PyObject *__pyx_v_grad = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_param_keys = 0;
  PyObject *__pyx_v_param_guess_range = 0;
  PyObject *__pyx_v_is_scale_parameter = 0;
  PyObject *__pyx_v_scaled_param_guesses = 0;
  PyObject *__pyx_v_param_length = 0;
  PyObject *__pyx_v_obs = 0;
  PyObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_obs0 = 0;
  PyObject *__pyx_v_init_flags = 0;
  PyObject *__pyx_v_init_fltrs = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_smooth_penalty = 0;
  PyObject *__pyx_v_bounds = 0;
  PyObject *__pyx_v_inter_steps = 0;
  PyObject *__pyx_v_objective = 0;
  CYTHON_UNUSED PyObject *__pyx_v_catchall_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_loglikelihood_latent (wrapper)", 0);
  __pyx_v_catchall_kwargs = PyDict_New(); if (unlikely(!__pyx_v_catchall_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_catchall_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_params,&__pyx_n_s_grad,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_param_keys,&__pyx_n_s_param_guess_range,&__pyx_n_s_is_scale_parameter,&__pyx_n_s_scaled_param_guesses,&__pyx_n_s_param_length,&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_obs0,&__pyx_n_s_init_flags,&__pyx_n_s_init_fltrs,&__pyx_n_s_tangent,&__pyx_n_s_smooth_penalty,&__pyx_n_s_bounds,&__pyx_n_s_inter_steps,&__pyx_n_s_objective,0};
    PyObject* values[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[1] = ((PyObject *)__pyx_int_0);
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_None);
    values[4] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_XDECREF(__pyx_v_catchall_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_66_loglikelihood_latent(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_params, CYTHON_UNUSED PyObject *__pyx_v_grad, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_param_keys, PyObject *__pyx_v_param_guess_range, PyObject *__pyx_v_is_scale_parameter, PyObject *__pyx_v_scaled_param_guesses, PyObject *__pyx_v_param_length, PyObject *__pyx_v_obs, PyObject *__pyx_v_fltr, PyObject *__pyx_v_Tf, PyObject *__pyx_v_obs0, PyObject *__pyx_v_init_flags, PyObject *__pyx_v_init_fltrs, PyObject *__pyx_v_tangent, PyObject *__pyx_v_smooth_penalty, PyObject *__pyx_v_bounds, PyObject *__pyx_v_inter_steps, PyObject *__pyx_v_objective, CYTHON_UNUSED PyObject *__pyx_v_catchall_kwargs) {
  PyObject *__pyx_v_inits = NULL;
  PyObject *__pyx_v_orig_params = NULL;
  PyObject *__pyx_v_parameters = NULL;
  PyObject *__pyx_v_kwargs = NULL;
  PyObject *__pyx_v_x0 = NULL;
  PyObject *__pyx_v_logl = NULL;
  double __pyx_v_penalty;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_loglikelihood_latent", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
  __Pyx_AddTraceback("pyross.inference.SIR_type._loglikelihood_latent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_inits);
  __Pyx_XDECREF(__pyx_v_orig_params);
  __Pyx_XDECREF(__pyx_v_parameters);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_XDECREF(__pyx_v_x0);
  __Pyx_XDECREF(__pyx_v_logl);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1725:                               param_guess_range=None, is_scale_parameter=None, scaled_param_guesses=None,
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject *)Py_None);
+1726:                               param_length=None, obs=None, fltr=None, Tf=None, obs0=None, init_flags=None,
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject *)Py_None);
    values[10] = ((PyObject *)Py_None);
    values[11] = ((PyObject *)Py_None);
    values[12] = ((PyObject *)Py_None);
    values[13] = ((PyObject *)Py_None);
+1727:                               init_fltrs=None, tangent=None, smooth_penalty=False, bounds=None, inter_steps=0,
    values[14] = ((PyObject *)Py_None);
    values[15] = ((PyObject *)Py_None);
    values[16] = ((PyObject *)Py_False);
    values[17] = ((PyObject *)Py_None);
    values[18] = ((PyObject *)__pyx_int_0);
    values[19] = ((PyObject *)__pyx_n_u_likelihood);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19);
        CYTHON_FALLTHROUGH;
        case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18);
        CYTHON_FALLTHROUGH;
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_params)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_grad);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_keys);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_guess_range);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_is_scale_parameter);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_scaled_param_guesses);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_length);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs0);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_flags);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_fltrs);
          if (value) { values[14] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 15:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[15] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 16:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_smooth_penalty);
          if (value) { values[16] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 17:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_bounds);
          if (value) { values[17] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 18:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[18] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 19:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_objective);
          if (value) { values[19] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_catchall_kwargs, values, pos_args, "_loglikelihood_latent") < 0)) __PYX_ERR(0, 1724, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19);
        CYTHON_FALLTHROUGH;
        case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18);
        CYTHON_FALLTHROUGH;
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_params = values[0];
    __pyx_v_grad = values[1];
    __pyx_v_generator = values[2];
    __pyx_v_intervention_fun = values[3];
    __pyx_v_param_keys = values[4];
    __pyx_v_param_guess_range = values[5];
    __pyx_v_is_scale_parameter = values[6];
    __pyx_v_scaled_param_guesses = values[7];
    __pyx_v_param_length = values[8];
    __pyx_v_obs = values[9];
    __pyx_v_fltr = values[10];
    __pyx_v_Tf = values[11];
    __pyx_v_obs0 = values[12];
    __pyx_v_init_flags = values[13];
    __pyx_v_init_fltrs = values[14];
    __pyx_v_tangent = values[15];
    __pyx_v_smooth_penalty = values[16];
    __pyx_v_bounds = values[17];
    __pyx_v_inter_steps = values[18];
    __pyx_v_objective = values[19];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_loglikelihood_latent", 0, 1, 20, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1724, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_catchall_kwargs); __pyx_v_catchall_kwargs = 0;
  __Pyx_AddTraceback("pyross.inference.SIR_type._loglikelihood_latent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_66_loglikelihood_latent(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_params, __pyx_v_grad, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_param_keys, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses, __pyx_v_param_length, __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_obs0, __pyx_v_init_flags, __pyx_v_init_fltrs, __pyx_v_tangent, __pyx_v_smooth_penalty, __pyx_v_bounds, __pyx_v_inter_steps, __pyx_v_objective, __pyx_v_catchall_kwargs);
 1728:                               objective='likelihood', **catchall_kwargs):
+1729:         if bounds is not None:
  __pyx_t_1 = (__pyx_v_bounds != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
  }
 1730:             # Check that params is within bounds. If not, return -np.inf.
+1731:             if np.any(bounds[:,0] > params) or np.any(bounds[:,1] < params):
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1731, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_any); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1731, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_bounds, __pyx_tuple__2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1731, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_v_params, Py_GT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1731, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1731, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1731, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (!__pyx_t_1) {
    } else {
      __pyx_t_2 = __pyx_t_1;
      goto __pyx_L5_bool_binop_done;
    }
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1731, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_any); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1731, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_bounds, __pyx_tuple__3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1731, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_v_params, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1731, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1731, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1731, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_2 = __pyx_t_1;
    __pyx_L5_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
    }
+1732:                 return -np.Inf
      __Pyx_XDECREF(__pyx_r);
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1732, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Inf); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1732, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = PyNumber_Negative(__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1732, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L0;
 1733: 
+1734:         inits =  np.copy(params[param_length:])
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_copy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetSlice(__pyx_v_params, 0, 0, &__pyx_v_param_length, NULL, NULL, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_inits = __pyx_t_3;
  __pyx_t_3 = 0;
 1735: 
 1736:         # Restore parameters from flattened parameters
+1737:         orig_params = pyross.utils.unflatten_parameters(params[:param_length],
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyross); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1737, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_utils); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1737, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_unflatten_parameters); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1737, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetSlice(__pyx_v_params, 0, 0, NULL, &__pyx_v_param_length, NULL, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1737, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
+1738:                           param_guess_range, is_scale_parameter, scaled_param_guesses)
  __pyx_t_5 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[5] = {__pyx_t_5, __pyx_t_6, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 4+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1737, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[5] = {__pyx_t_5, __pyx_t_6, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 4+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1737, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(4+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1737, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_6);
    __Pyx_INCREF(__pyx_v_param_guess_range);
    __Pyx_GIVEREF(__pyx_v_param_guess_range);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_param_guess_range);
    __Pyx_INCREF(__pyx_v_is_scale_parameter);
    __Pyx_GIVEREF(__pyx_v_is_scale_parameter);
    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_v_is_scale_parameter);
    __Pyx_INCREF(__pyx_v_scaled_param_guesses);
    __Pyx_GIVEREF(__pyx_v_scaled_param_guesses);
    PyTuple_SET_ITEM(__pyx_t_8, 3+__pyx_t_7, __pyx_v_scaled_param_guesses);
    __pyx_t_6 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1737, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_orig_params = __pyx_t_3;
  __pyx_t_3 = 0;
 1739: 
+1740:         parameters, kwargs = self.fill_params_dict(param_keys, orig_params, return_additional_params=True)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_fill_params_dict); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_v_param_keys);
  __Pyx_GIVEREF(__pyx_v_param_keys);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_param_keys);
  __Pyx_INCREF(__pyx_v_orig_params);
  __Pyx_GIVEREF(__pyx_v_orig_params);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_orig_params);
  __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_return_additional_params, Py_True) < 0) __PYX_ERR(0, 1740, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
    PyObject* sequence = __pyx_t_6;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1740, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_8 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1740, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1740, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_3 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1740, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_9 = Py_TYPE(__pyx_t_3)->tp_iternext;
    index = 0; __pyx_t_8 = __pyx_t_9(__pyx_t_3); if (unlikely(!__pyx_t_8)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_8);
    index = 1; __pyx_t_4 = __pyx_t_9(__pyx_t_3); if (unlikely(!__pyx_t_4)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_3), 2) < 0) __PYX_ERR(0, 1740, __pyx_L1_error)
    __pyx_t_9 = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_unpacking_done;
    __pyx_L7_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_9 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1740, __pyx_L1_error)
    __pyx_L8_unpacking_done:;
  }
  __pyx_v_parameters = __pyx_t_8;
  __pyx_t_8 = 0;
  __pyx_v_kwargs = __pyx_t_4;
  __pyx_t_4 = 0;
 1741: 
+1742:         self.set_params(parameters)
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_params); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1742, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_8 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_6 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_8, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_parameters);
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1742, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 1743: 
+1744:         if generator is not None:
  __pyx_t_2 = (__pyx_v_generator != Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L9;
  }
+1745:             if intervention_fun is None:
    __pyx_t_1 = (__pyx_v_intervention_fun == Py_None);
    __pyx_t_2 = (__pyx_t_1 != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L10;
    }
+1746:                 self.contactMatrix = generator.constant_contactMatrix(**kwargs)
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_constant_contactMatrix); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1746, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__pyx_v_kwargs == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
        __PYX_ERR(0, 1746, __pyx_L1_error)
      }
      if (likely(PyDict_CheckExact(__pyx_v_kwargs))) {
        __pyx_t_4 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1746, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      } else {
        __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kwargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1746, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1746, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GIVEREF(__pyx_t_8);
      __Pyx_GOTREF(__pyx_v_self->contactMatrix);
      __Pyx_DECREF(__pyx_v_self->contactMatrix);
      __pyx_v_self->contactMatrix = __pyx_t_8;
      __pyx_t_8 = 0;
 1747:             else:
+1748:                 self.contactMatrix = generator.intervention_custom_temporal(intervention_fun, **kwargs)
    /*else*/ {
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_intervention_custom_temporal); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1748, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1748, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_v_intervention_fun);
      __Pyx_GIVEREF(__pyx_v_intervention_fun);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_intervention_fun);
      if (unlikely(__pyx_v_kwargs == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
        __PYX_ERR(0, 1748, __pyx_L1_error)
      }
      if (likely(PyDict_CheckExact(__pyx_v_kwargs))) {
        __pyx_t_6 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1748, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
      } else {
        __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kwargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1748, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
      }
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1748, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GIVEREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_v_self->contactMatrix);
      __Pyx_DECREF(__pyx_v_self->contactMatrix);
      __pyx_v_self->contactMatrix = __pyx_t_3;
      __pyx_t_3 = 0;
    }
    __pyx_L10:;
 1749:         else:
+1750:             if kwargs != {}:
  /*else*/ {
    __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1750, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = PyObject_RichCompare(__pyx_v_kwargs, __pyx_t_3, Py_NE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1750, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1750, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(__pyx_t_2)) {
/* … */
    }
  }
  __pyx_L9:;
+1751:                 raise Exception('Key error or unspecified generator')
      __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1751, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_Raise(__pyx_t_6, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __PYX_ERR(0, 1751, __pyx_L1_error)
 1752: 
+1753:         x0 = self._construct_inits(inits, init_flags, init_fltrs, obs0, fltr[0])
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_construct_inits); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1753, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_fltr, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1753, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_8 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[6] = {__pyx_t_8, __pyx_v_inits, __pyx_v_init_flags, __pyx_v_init_fltrs, __pyx_v_obs0, __pyx_t_4};
    __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 5+__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1753, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[6] = {__pyx_t_8, __pyx_v_inits, __pyx_v_init_flags, __pyx_v_init_fltrs, __pyx_v_obs0, __pyx_t_4};
    __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 5+__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1753, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(5+__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1753, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_8) {
      __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_8); __pyx_t_8 = NULL;
    }
    __Pyx_INCREF(__pyx_v_inits);
    __Pyx_GIVEREF(__pyx_v_inits);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_7, __pyx_v_inits);
    __Pyx_INCREF(__pyx_v_init_flags);
    __Pyx_GIVEREF(__pyx_v_init_flags);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_7, __pyx_v_init_flags);
    __Pyx_INCREF(__pyx_v_init_fltrs);
    __Pyx_GIVEREF(__pyx_v_init_fltrs);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_7, __pyx_v_init_fltrs);
    __Pyx_INCREF(__pyx_v_obs0);
    __Pyx_GIVEREF(__pyx_v_obs0);
    PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_7, __pyx_v_obs0);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 4+__pyx_t_7, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1753, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_x0 = __pyx_t_6;
  __pyx_t_6 = 0;
+1754:         logl = 0
  __Pyx_INCREF(__pyx_int_0);
  __pyx_v_logl = __pyx_int_0;
+1755:         if smooth_penalty == True:
  __pyx_t_6 = PyObject_RichCompare(__pyx_v_smooth_penalty, Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1755, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1755, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L12;
  }
 1756:             # Steer the global optimiser away from regions with negative initial values.
+1757:             penalty = self._penalty_from_negative_values(x0)
    if (!(likely(((__pyx_v_x0) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_x0, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1757, __pyx_L1_error)
    __pyx_v_penalty = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->_penalty_from_negative_values(__pyx_v_self, ((PyArrayObject *)__pyx_v_x0));
+1758:             x0[x0<0] = 0.1/self.Omega # set to be small and positive
    __pyx_t_6 = PyFloat_FromDouble((0.1 / __pyx_v_self->Omega)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_3 = PyObject_RichCompare(__pyx_v_x0, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1758, __pyx_L1_error)
    if (unlikely(PyObject_SetItem(__pyx_v_x0, __pyx_t_3, __pyx_t_6) < 0)) __PYX_ERR(0, 1758, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+1759:             logl -= penalty*fltr.shape[0]
    __pyx_t_6 = PyFloat_FromDouble(__pyx_v_penalty); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_fltr, __pyx_n_s_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyNumber_Multiply(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyNumber_InPlaceSubtract(__pyx_v_logl, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_logl, __pyx_t_5);
    __pyx_t_5 = 0;
+1760:         elif smooth_penalty == False:
  __pyx_t_5 = PyObject_RichCompare(__pyx_v_smooth_penalty, Py_False, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1760, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1760, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__pyx_t_2) {
/* … */
  }
  __pyx_L12:;
 1761:             # Return -Inf if one of the initial values is negative.
+1762:             if not self._all_positive(x0):
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_all_positive); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1762, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_5 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_6, __pyx_v_x0) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_x0);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1762, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1762, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_1 = ((!__pyx_t_2) != 0);
    if (__pyx_t_1) {
/* … */
    }
+1763:                 return -np.Inf
      __Pyx_XDECREF(__pyx_r);
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1763, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_Inf); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1763, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyNumber_Negative(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1763, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_r = __pyx_t_5;
      __pyx_t_5 = 0;
      goto __pyx_L0;
 1764:         # We also support `smooth_penalty == None`, which is useful for example for computing the Hessian.
 1765: 
+1766:         if objective == 'likelihood':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_objective, __pyx_n_u_likelihood, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1766, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L14;
  }
+1767:             logl += -self._obtain_logp_for_lat_traj(x0, obs, fltr[1:], Tf, tangent, inter_steps=inter_steps)
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_x0, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 1767, __pyx_L1_error)
    __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_obs, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 1767, __pyx_L1_error)
    __pyx_t_5 = __Pyx_PyObject_GetSlice(__pyx_v_fltr, 1, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1767, __pyx_L1_error)
    __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_v_Tf); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1767, __pyx_L1_error)
    __pyx_t_13 = __Pyx_PyIndex_AsSsize_t(__pyx_v_inter_steps); if (unlikely((__pyx_t_13 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1767, __pyx_L1_error)
    __pyx_t_15.__pyx_n = 2;
    __pyx_t_15.tangent = __pyx_v_tangent;
    __pyx_t_15.inter_steps = __pyx_t_13;
    __pyx_t_14 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->_obtain_logp_for_lat_traj(__pyx_v_self, __pyx_t_10, __pyx_t_11, ((PyArrayObject *)__pyx_t_5), __pyx_t_12, &__pyx_t_15); 
    __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
    __pyx_t_10.memview = NULL;
    __pyx_t_10.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
    __pyx_t_11.memview = NULL;
    __pyx_t_11.data = NULL;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyFloat_FromDouble((-__pyx_t_14)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_logl, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF_SET(__pyx_v_logl, __pyx_t_3);
    __pyx_t_3 = 0;
+1768:         elif objective == 'least_squares':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_objective, __pyx_n_u_least_squares, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1768, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L14;
  }
+1769:             logl += -self._obtain_square_dev_for_lat_traj(x0, obs, fltr[1:], Tf)
    __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_x0, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 1769, __pyx_L1_error)
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_obs, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 1769, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_fltr, 1, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1769, __pyx_L1_error)
    __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_v_Tf); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1769, __pyx_L1_error)
    __pyx_t_5 = PyFloat_FromDouble((-((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->_obtain_square_dev_for_lat_traj(__pyx_v_self, __pyx_t_11, __pyx_t_10, ((PyArrayObject *)__pyx_t_3), __pyx_t_14))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
    __pyx_t_11.memview = NULL;
    __pyx_t_11.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
    __pyx_t_10.memview = NULL;
    __pyx_t_10.data = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_logl, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF_SET(__pyx_v_logl, __pyx_t_3);
    __pyx_t_3 = 0;
+1770:         elif objective == 'least_squares_diff':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_objective, __pyx_n_u_least_squares_diff, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1770, __pyx_L1_error)
  if (likely(__pyx_t_1)) {
/* … */
    goto __pyx_L14;
  }
+1771:             logl += -self._obtain_square_dev_for_lat_traj_diff(x0, obs, fltr[1:], Tf)
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_x0, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 1771, __pyx_L1_error)
    __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_obs, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 1771, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_fltr, 1, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1771, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1771, __pyx_L1_error)
    __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_v_Tf); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1771, __pyx_L1_error)
    __pyx_t_5 = PyFloat_FromDouble((-((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->_obtain_square_dev_for_lat_traj_diff(__pyx_v_self, __pyx_t_10, __pyx_t_11, ((PyArrayObject *)__pyx_t_3), __pyx_t_14))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1771, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
    __pyx_t_10.memview = NULL;
    __pyx_t_10.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
    __pyx_t_11.memview = NULL;
    __pyx_t_11.data = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_logl, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1771, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF_SET(__pyx_v_logl, __pyx_t_3);
    __pyx_t_3 = 0;
 1772:         else:
+1773:             raise Exception('Unknown objective')
  /*else*/ {
    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1773, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 1773, __pyx_L1_error)
  }
  __pyx_L14:;
/* … */
  __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_u_Unknown_objective); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 1773, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__21);
  __Pyx_GIVEREF(__pyx_tuple__21);
 1774: 
+1775:         return logl
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_logl);
  __pyx_r = __pyx_v_logl;
  goto __pyx_L0;
 1776: 
+1777:     def _logposterior_latent(self, params, prior=None, verbose_likelihood=False,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_69_logposterior_latent(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_69_logposterior_latent(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_params = 0;
  PyObject *__pyx_v_prior = 0;
  PyObject *__pyx_v_verbose_likelihood = 0;
  PyObject *__pyx_v_logl_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_logposterior_latent (wrapper)", 0);
  __pyx_v_logl_kwargs = PyDict_New(); if (unlikely(!__pyx_v_logl_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_logl_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_params,&__pyx_n_s_prior,&__pyx_n_s_verbose_likelihood,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_params)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prior);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_verbose_likelihood);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_logl_kwargs, values, pos_args, "_logposterior_latent") < 0)) __PYX_ERR(0, 1777, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_params = values[0];
    __pyx_v_prior = values[1];
    __pyx_v_verbose_likelihood = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_logposterior_latent", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1777, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_logl_kwargs); __pyx_v_logl_kwargs = 0;
  __Pyx_AddTraceback("pyross.inference.SIR_type._logposterior_latent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_68_logposterior_latent(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_params, __pyx_v_prior, __pyx_v_verbose_likelihood, __pyx_v_logl_kwargs);

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_logl_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_68_logposterior_latent(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_params, PyObject *__pyx_v_prior, PyObject *__pyx_v_verbose_likelihood, PyObject *__pyx_v_logl_kwargs) {
  PyObject *__pyx_v_logl = NULL;
  PyObject *__pyx_v_logp = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_logposterior_latent", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pyross.inference.SIR_type._logposterior_latent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_logl);
  __Pyx_XDECREF(__pyx_v_logp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1778:                              **logl_kwargs):
+1779:         logl = self._loglikelihood_latent(params, **logl_kwargs)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_loglikelihood_latent); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1779, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1779, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_params);
  __Pyx_GIVEREF(__pyx_v_params);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_params);
  __pyx_t_3 = PyDict_Copy(__pyx_v_logl_kwargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1779, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1779, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_logl = __pyx_t_4;
  __pyx_t_4 = 0;
+1780:         logp = logl + np.sum(prior.logpdf(params))
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sum); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_prior, __pyx_n_s_logpdf); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v_params) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_params);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Add(__pyx_v_logl, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_logp = __pyx_t_2;
  __pyx_t_2 = 0;
+1781:         if verbose_likelihood:
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_verbose_likelihood); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1781, __pyx_L1_error)
  if (__pyx_t_6) {
/* … */
  }
+1782:             print(logl,logp-logl,logp)
    __pyx_t_2 = PyNumber_Subtract(__pyx_v_logp, __pyx_v_logl); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_logl);
    __Pyx_GIVEREF(__pyx_v_logl);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_logl);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
    __Pyx_INCREF(__pyx_v_logp);
    __Pyx_GIVEREF(__pyx_v_logp);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_logp);
    __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1783:         return logp
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_logp);
  __pyx_r = __pyx_v_logp;
  goto __pyx_L0;
 1784: 
+1785:     def _latent_infer_to_minimize(self, params, grad=0,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_71_latent_infer_to_minimize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_70_latent_infer_to_minimize[] = "Objective function for minimization call in latent_infer.";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_71_latent_infer_to_minimize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_params = 0;
  CYTHON_UNUSED PyObject *__pyx_v_grad = 0;
  PyObject *__pyx_v_logp_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_latent_infer_to_minimize (wrapper)", 0);
  __pyx_v_logp_kwargs = PyDict_New(); if (unlikely(!__pyx_v_logp_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_logp_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_params,&__pyx_n_s_grad,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_params)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_grad);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_logp_kwargs, values, pos_args, "_latent_infer_to_minimize") < 0)) __PYX_ERR(0, 1785, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_params = values[0];
    __pyx_v_grad = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_latent_infer_to_minimize", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1785, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_logp_kwargs); __pyx_v_logp_kwargs = 0;
  __Pyx_AddTraceback("pyross.inference.SIR_type._latent_infer_to_minimize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_70_latent_infer_to_minimize(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_params, __pyx_v_grad, __pyx_v_logp_kwargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_logp_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_70_latent_infer_to_minimize(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_params, CYTHON_UNUSED PyObject *__pyx_v_grad, PyObject *__pyx_v_logp_kwargs) {
  PyObject *__pyx_v_logp = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_latent_infer_to_minimize", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pyross.inference.SIR_type._latent_infer_to_minimize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_logp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1786:                                    **logp_kwargs):
 1787:         """Objective function for minimization call in latent_infer."""
+1788:         if 'disable_penalty' in logp_kwargs:
  __pyx_t_1 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_disable_penalty, __pyx_v_logp_kwargs, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1788, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+1789:             logp = self._logposterior_latent(params, smooth_penalty=None,  **logp_kwargs)
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_logposterior_latent); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1789, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1789, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_params);
    __Pyx_GIVEREF(__pyx_v_params);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_params);
    __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1789, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_smooth_penalty, Py_None) < 0) __PYX_ERR(0, 1789, __pyx_L1_error)
    __pyx_t_5 = __pyx_t_6;
    __pyx_t_6 = 0;
    if (__Pyx_MergeKeywords(__pyx_t_5, __pyx_v_logp_kwargs) < 0) __PYX_ERR(0, 1789, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1789, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_v_logp = __pyx_t_6;
    __pyx_t_6 = 0;
 1790:         else:
+1791:             logp = self._logposterior_latent(params, smooth_penalty=True,  **logp_kwargs)
  /*else*/ {
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_logposterior_latent); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1791, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1791, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v_params);
    __Pyx_GIVEREF(__pyx_v_params);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_params);
    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1791, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_smooth_penalty, Py_True) < 0) __PYX_ERR(0, 1791, __pyx_L1_error)
    __pyx_t_4 = __pyx_t_3;
    __pyx_t_3 = 0;
    if (__Pyx_MergeKeywords(__pyx_t_4, __pyx_v_logp_kwargs) < 0) __PYX_ERR(0, 1791, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1791, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_logp = __pyx_t_3;
    __pyx_t_3 = 0;
  }
  __pyx_L3:;
+1792:         return -logp
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = PyNumber_Negative(__pyx_v_logp); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1792, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 1793: 
+1794:     def latent_infer(self, np.ndarray obs, np.ndarray fltr, Tf, param_priors, init_priors,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_73latent_infer(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_72latent_infer[] = "\n        Compute the maximum a-posteriori (MAP) estimate for the initial conditions and all desired parameters, including control parameters,\n        for a SIR type model with partially observed classes. The unobserved classes are treated as latent variables.\n\n        Parameters\n        ----------\n        obs:  np.array\n            The partially observed trajectory.\n        fltr: 2d np.array\n            The filter for the observation such that\n            :math:`F_{ij} x_j (t) = obs_i(t)`\n        Tf: float\n            Total time of the trajectory\n        param_priors: dict\n            A dictionary that specifies priors for parameters (including control parameters, if desired). See `infer` for further explanations.\n        init_priors: dict\n            A dictionary for priors for initial conditions. See below for examples\n        contactMatrix: callable, optional\n            A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.\n            Either a contactMatrix or a generator must be specified.\n        generator: pyross.contactMatrix, optional\n            A pyross.contactMatrix object that generates a contact matrix function with specified lockdown\n            parameters.\n            Either a contactMatrix or a generator must be specified.\n        intervention_fun: callable, optional\n            The calling signature is `intervention_func(t, **kwargs)`,\n            where t is time and kwargs are other keyword arguments for the function.\n            The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.\n            The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.\n            If not set, assume intervention that's constant in time.\n            See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.\n        tangent: bool, optional\n            Set to True to use tangent space inference. Default is false"".\n        verbose: bool, optional\n            Set to True to see intermediate outputs from the optimizer.\n        ftol: double\n            Relative tolerance of logp\n        global_max_iter: int, optional\n            Number of global optimisations performed.\n        local_max_iter: int, optional\n            Number of local optimisation performed.\n        local_initital_step: optional, float or np.array\n            Initial step size for the local optimiser. If scalar, relative to the initial guess. \n            Default: Deterined by final state of global optimiser, or, if enable_global=False, 0.01\n        global_atol: float\n            The absolute tolerance for global minimisation.\n        enable_global: bool, optional\n            Set to True to enable global optimisation.\n        enable_local: bool, optional\n            Set to True to enable local optimisation.\n        cma_processes: int, optional\n            Number of parallel processes used for global optimisation.\n        cma_population: int, optional\n            The number of samples used in each step of the CMA algorithm.\n        cma_random_seed: int (between 0 and 2**32-1)\n            Random seed for the optimisation algorithms. By default it is generated from numpy.random.randint.\n        objective: string, optional\n            Objective for the minimisation. 'likelihood' (default), 'least_square' (least squares fit w.r.t. absolute compartment values), \n            'least_squares_diff' (least squares fit w.r.t. time-differences of compartment values)\n        alternative_guess: np.array, optional\n            Alternative initial quess, different form the mean of the prior. \n            Array in the same format as 'flat_params' in the result dictionary of a previous optimisation run.\n        use_mode_as_guess: bool, optional\n            Initialise optimisation with mode instead of mean of the prior. Makes a difference for lognormal distributions. \n        tmp_file: optional, stri""ng\n            If specified, name of a file to store the temporary best estimate of the global optimiser (as backup or for inspection) as numpy array file \n        load_backup_file: optional, string\n            If specified, name of a file to restore the the state of the global optimiser\n\n        Returns\n        -------\n        output_dict: dict\n            A dictionary containing the following keys for users:\n\n            x0: np.array\n                MAP estimates for the initial conditions\n            params_dict: dict\n                dictionary for MAP estimates for model parameters\n            control_params_dict: dict\n                dictionary for MAP estimates for control parameters (if requested)\n            -logp: float\n                Value of -logp at MAP.\n\n        Note\n        ----\n        This function combines the functionality of `latent_infer_parameters` and `latent_infer_control`,\n        which will be deprecated.\n        To infer model parameters only, specify a fixed `contactMatrix` function.\n        To infer control parameters only, specify a `generator` and do not specify priors for model parameters.\n\n        Examples\n        --------\n        Here we list three examples, one for inferring all initial conditions\n        along the fastest growing linear mode, one for inferring the initial\n        conditions individually and a mixed one.\n\n        First, suppose we only observe Is out of (S, Ia, Is) and we wish to\n        infer all compartmental values of S and Ia independently. For two age\n        groups with population [2500, 7500],\n\n        >>> init_priors = {\n                'independent':{\n                    'fltr': [True, True, True, True, False, False],\n                    'mean': [2400, 7400, 50, 50],\n                    'std': [200, 200, 200, 200],\n                    'bounds': [[2000, 2500], [7000, 7500], [0, 400], [0, 400]]\n                }\n            }\n\n        In the 'fltr' entry, we need ""a boolean array indicating which components\n        of the full x0 = [S0[0], S0[1], Ia0[0], Ia0[1], Is0[0], Ia0[1]] array we are inferring.\n        By setting fltr = [True, True, True, True, False, False], the inference algorithm\n        will know that we are inferring all components of S0 and Ia0 but not Is0.\n        Similar to inference for parameter values, we also assume a log-normal\n        distribution for the priors for the initial conditions.\n\n        Next, if we are happy to assume that all our initial conditions lie\n        along the fastest growing linear mode and we will only infer the\n        coefficient of the mode, the init_priors dict would be,\n\n        >>> init_priors = {\n                'lin_mode_coeff':{\n                    'fltr': [True, True, True, True, False, False],\n                    'mean': 100,\n                    'std': 100,\n                    'bounds': [1, 1000]\n                }\n            }\n\n        Note that the 'fltr' entry is still the same as before because we still\n        only want to infer S and Ia, and the initial conditions for Is is fixed\n        by the observation.\n\n        Finally, if we want to do a mixture of both (useful when some compartments\n        have aligned with the fastest growing mode but others haven't), we need\n        to set the init_priors to be,\n\n        >>> init_priors = {\n                'lin_mode_coeff': {\n                    'fltr': [True, True, False, False, False, False],\n                    'mean': 100,\n                    'std': 100,\n                    'bounds': [1, 1000]\n                },\n                'independent':{\n                    'fltr': [False, False, True, True, False, False],\n                    'mean': [50, 50],\n                    'std': [200, 200],\n                    'bounds': [0, 400], [0, 400]\n                }\n            }\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_73latent_infer(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_obs = 0;
  PyArrayObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_param_priors = 0;
  PyObject *__pyx_v_init_priors = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_verbose = 0;
  PyObject *__pyx_v_verbose_likelihood = 0;
  PyObject *__pyx_v_ftol = 0;
  PyObject *__pyx_v_global_max_iter = 0;
  PyObject *__pyx_v_local_max_iter = 0;
  PyObject *__pyx_v_local_initial_step = 0;
  PyObject *__pyx_v_global_atol = 0;
  PyObject *__pyx_v_enable_global = 0;
  PyObject *__pyx_v_enable_local = 0;
  PyObject *__pyx_v_cma_processes = 0;
  PyObject *__pyx_v_cma_population = 0;
  PyObject *__pyx_v_cma_random_seed = 0;
  PyObject *__pyx_v_objective = 0;
  PyObject *__pyx_v_alternative_guess = 0;
  PyObject *__pyx_v_use_mode_as_guess = 0;
  PyObject *__pyx_v_tmp_file = 0;
  PyObject *__pyx_v_load_backup_file = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_infer (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_param_priors,&__pyx_n_s_init_priors,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_tangent,&__pyx_n_s_verbose,&__pyx_n_s_verbose_likelihood,&__pyx_n_s_ftol,&__pyx_n_s_global_max_iter,&__pyx_n_s_local_max_iter,&__pyx_n_s_local_initial_step,&__pyx_n_s_global_atol,&__pyx_n_s_enable_global,&__pyx_n_s_enable_local,&__pyx_n_s_cma_processes,&__pyx_n_s_cma_population,&__pyx_n_s_cma_random_seed,&__pyx_n_s_objective,&__pyx_n_s_alternative_guess,&__pyx_n_s_use_mode_as_guess,&__pyx_n_s_tmp_file,&__pyx_n_s_load_backup_file,0};
    PyObject* values[26] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_72latent_infer(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyArrayObject *__pyx_v_obs, PyArrayObject *__pyx_v_fltr, PyObject *__pyx_v_Tf, PyObject *__pyx_v_param_priors, PyObject *__pyx_v_init_priors, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_tangent, PyObject *__pyx_v_verbose, PyObject *__pyx_v_verbose_likelihood, PyObject *__pyx_v_ftol, PyObject *__pyx_v_global_max_iter, PyObject *__pyx_v_local_max_iter, PyObject *__pyx_v_local_initial_step, PyObject *__pyx_v_global_atol, PyObject *__pyx_v_enable_global, PyObject *__pyx_v_enable_local, PyObject *__pyx_v_cma_processes, PyObject *__pyx_v_cma_population, PyObject *__pyx_v_cma_random_seed, PyObject *__pyx_v_objective, PyObject *__pyx_v_alternative_guess, PyObject *__pyx_v_use_mode_as_guess, PyObject *__pyx_v_tmp_file, PyObject *__pyx_v_load_backup_file) {
  PyObject *__pyx_v_obs0 = NULL;
  PyObject *__pyx_v_param_prior_names = NULL;
  PyObject *__pyx_v_keys = NULL;
  PyObject *__pyx_v_param_mean = NULL;
  PyObject *__pyx_v_param_stds = NULL;
  PyObject *__pyx_v_param_guess = NULL;
  PyObject *__pyx_v_param_guess_std = NULL;
  PyObject *__pyx_v_param_bounds = NULL;
  PyObject *__pyx_v_param_guess_range = NULL;
  PyObject *__pyx_v_is_scale_parameter = NULL;
  PyObject *__pyx_v_scaled_param_guesses = NULL;
  PyObject *__pyx_v_init_prior_names = NULL;
  PyObject *__pyx_v_init_mean = NULL;
  PyObject *__pyx_v_init_stds = NULL;
  PyObject *__pyx_v_init_guess = NULL;
  PyObject *__pyx_v_init_guess_std = NULL;
  PyObject *__pyx_v_init_bounds = NULL;
  PyObject *__pyx_v_init_flags = NULL;
  PyObject *__pyx_v_init_fltrs = NULL;
  PyObject *__pyx_v_param_length = NULL;
  PyObject *__pyx_v_mean = NULL;
  PyObject *__pyx_v_stds = NULL;
  PyObject *__pyx_v_guess = NULL;
  PyObject *__pyx_v_guess_std = NULL;
  PyObject *__pyx_v_bounds = NULL;
  PyObject *__pyx_v_prior = NULL;
  PyObject *__pyx_v_cma_stds = NULL;
  PyObject *__pyx_v_minimize_args = NULL;
  PyObject *__pyx_v_res = NULL;
  PyObject *__pyx_v_estimates = NULL;
  PyObject *__pyx_v_param_estimates = NULL;
  PyObject *__pyx_v_orig_params = NULL;
  PyObject *__pyx_v_init_estimates = NULL;
  PyObject *__pyx_v_map_params_dict = NULL;
  PyObject *__pyx_v_map_control_params_dict = NULL;
  PyObject *__pyx_v_map_x0 = NULL;
  PyObject *__pyx_v_l_post = NULL;
  PyObject *__pyx_v_l_prior = NULL;
  PyObject *__pyx_v_l_like = NULL;
  PyObject *__pyx_v_output_dict = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_infer", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_obs);
  __Pyx_INCREF((PyObject *)__pyx_v_fltr);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_infer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_obs0);
  __Pyx_XDECREF(__pyx_v_param_prior_names);
  __Pyx_XDECREF(__pyx_v_keys);
  __Pyx_XDECREF(__pyx_v_param_mean);
  __Pyx_XDECREF(__pyx_v_param_stds);
  __Pyx_XDECREF(__pyx_v_param_guess);
  __Pyx_XDECREF(__pyx_v_param_guess_std);
  __Pyx_XDECREF(__pyx_v_param_bounds);
  __Pyx_XDECREF(__pyx_v_param_guess_range);
  __Pyx_XDECREF(__pyx_v_is_scale_parameter);
  __Pyx_XDECREF(__pyx_v_scaled_param_guesses);
  __Pyx_XDECREF(__pyx_v_init_prior_names);
  __Pyx_XDECREF(__pyx_v_init_mean);
  __Pyx_XDECREF(__pyx_v_init_stds);
  __Pyx_XDECREF(__pyx_v_init_guess);
  __Pyx_XDECREF(__pyx_v_init_guess_std);
  __Pyx_XDECREF(__pyx_v_init_bounds);
  __Pyx_XDECREF(__pyx_v_init_flags);
  __Pyx_XDECREF(__pyx_v_init_fltrs);
  __Pyx_XDECREF(__pyx_v_param_length);
  __Pyx_XDECREF(__pyx_v_mean);
  __Pyx_XDECREF(__pyx_v_stds);
  __Pyx_XDECREF(__pyx_v_guess);
  __Pyx_XDECREF(__pyx_v_guess_std);
  __Pyx_XDECREF(__pyx_v_bounds);
  __Pyx_XDECREF(__pyx_v_prior);
  __Pyx_XDECREF(__pyx_v_cma_stds);
  __Pyx_XDECREF(__pyx_v_minimize_args);
  __Pyx_XDECREF(__pyx_v_res);
  __Pyx_XDECREF(__pyx_v_estimates);
  __Pyx_XDECREF(__pyx_v_param_estimates);
  __Pyx_XDECREF(__pyx_v_orig_params);
  __Pyx_XDECREF(__pyx_v_init_estimates);
  __Pyx_XDECREF(__pyx_v_map_params_dict);
  __Pyx_XDECREF(__pyx_v_map_control_params_dict);
  __Pyx_XDECREF(__pyx_v_map_x0);
  __Pyx_XDECREF(__pyx_v_l_post);
  __Pyx_XDECREF(__pyx_v_l_prior);
  __Pyx_XDECREF(__pyx_v_l_like);
  __Pyx_XDECREF(__pyx_v_output_dict);
  __Pyx_XDECREF((PyObject *)__pyx_v_obs);
  __Pyx_XDECREF((PyObject *)__pyx_v_fltr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1795:                      contactMatrix=None, generator=None,
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_None);
+1796:                      intervention_fun=None, tangent=False,
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)Py_False);
+1797:                      verbose=False, verbose_likelihood=False, ftol=1e-5, global_max_iter=100,
    values[9] = ((PyObject *)Py_False);
    values[10] = ((PyObject *)Py_False);
    values[11] = ((PyObject *)__pyx_float_1eneg_5);
    values[12] = ((PyObject *)__pyx_int_100);
    values[13] = ((PyObject *)__pyx_int_100);
+1798:                      local_max_iter=100, local_initial_step=None, global_atol=1., enable_global=True,
    values[14] = ((PyObject *)Py_None);
    values[15] = ((PyObject *)__pyx_float_1_);
    values[16] = ((PyObject *)Py_True);
+1799:                      enable_local=True, cma_processes=0, cma_population=16, cma_random_seed=None,
    values[17] = ((PyObject *)Py_True);
    values[18] = ((PyObject *)__pyx_int_0);
    values[19] = ((PyObject *)__pyx_int_16);
    values[20] = ((PyObject *)Py_None);
    values[21] = ((PyObject *)__pyx_n_u_likelihood);
+1800:                      objective='likelihood', alternative_guess=None, use_mode_as_guess=False, tmp_file=None, load_backup_file=None):
    values[22] = ((PyObject *)Py_None);
    values[23] = ((PyObject *)Py_False);
    values[24] = ((PyObject *)Py_None);
    values[25] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 26: values[25] = PyTuple_GET_ITEM(__pyx_args, 25);
        CYTHON_FALLTHROUGH;
        case 25: values[24] = PyTuple_GET_ITEM(__pyx_args, 24);
        CYTHON_FALLTHROUGH;
        case 24: values[23] = PyTuple_GET_ITEM(__pyx_args, 23);
        CYTHON_FALLTHROUGH;
        case 23: values[22] = PyTuple_GET_ITEM(__pyx_args, 22);
        CYTHON_FALLTHROUGH;
        case 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21);
        CYTHON_FALLTHROUGH;
        case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20);
        CYTHON_FALLTHROUGH;
        case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19);
        CYTHON_FALLTHROUGH;
        case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18);
        CYTHON_FALLTHROUGH;
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer", 0, 5, 26, 1); __PYX_ERR(0, 1794, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer", 0, 5, 26, 2); __PYX_ERR(0, 1794, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer", 0, 5, 26, 3); __PYX_ERR(0, 1794, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer", 0, 5, 26, 4); __PYX_ERR(0, 1794, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_verbose);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_verbose_likelihood);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ftol);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_global_max_iter);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_local_max_iter);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_local_initial_step);
          if (value) { values[14] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 15:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_global_atol);
          if (value) { values[15] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 16:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_enable_global);
          if (value) { values[16] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 17:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_enable_local);
          if (value) { values[17] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 18:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cma_processes);
          if (value) { values[18] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 19:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cma_population);
          if (value) { values[19] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 20:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cma_random_seed);
          if (value) { values[20] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 21:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_objective);
          if (value) { values[21] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 22:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_alternative_guess);
          if (value) { values[22] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 23:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_use_mode_as_guess);
          if (value) { values[23] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 24:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tmp_file);
          if (value) { values[24] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 25:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_load_backup_file);
          if (value) { values[25] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "latent_infer") < 0)) __PYX_ERR(0, 1794, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 26: values[25] = PyTuple_GET_ITEM(__pyx_args, 25);
        CYTHON_FALLTHROUGH;
        case 25: values[24] = PyTuple_GET_ITEM(__pyx_args, 24);
        CYTHON_FALLTHROUGH;
        case 24: values[23] = PyTuple_GET_ITEM(__pyx_args, 23);
        CYTHON_FALLTHROUGH;
        case 23: values[22] = PyTuple_GET_ITEM(__pyx_args, 22);
        CYTHON_FALLTHROUGH;
        case 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21);
        CYTHON_FALLTHROUGH;
        case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20);
        CYTHON_FALLTHROUGH;
        case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19);
        CYTHON_FALLTHROUGH;
        case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18);
        CYTHON_FALLTHROUGH;
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obs = ((PyArrayObject *)values[0]);
    __pyx_v_fltr = ((PyArrayObject *)values[1]);
    __pyx_v_Tf = values[2];
    __pyx_v_param_priors = values[3];
    __pyx_v_init_priors = values[4];
    __pyx_v_contactMatrix = values[5];
    __pyx_v_generator = values[6];
    __pyx_v_intervention_fun = values[7];
    __pyx_v_tangent = values[8];
    __pyx_v_verbose = values[9];
    __pyx_v_verbose_likelihood = values[10];
    __pyx_v_ftol = values[11];
    __pyx_v_global_max_iter = values[12];
    __pyx_v_local_max_iter = values[13];
    __pyx_v_local_initial_step = values[14];
    __pyx_v_global_atol = values[15];
    __pyx_v_enable_global = values[16];
    __pyx_v_enable_local = values[17];
    __pyx_v_cma_processes = values[18];
    __pyx_v_cma_population = values[19];
    __pyx_v_cma_random_seed = values[20];
    __pyx_v_objective = values[21];
    __pyx_v_alternative_guess = values[22];
    __pyx_v_use_mode_as_guess = values[23];
    __pyx_v_tmp_file = values[24];
    __pyx_v_load_backup_file = values[25];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("latent_infer", 0, 5, 26, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1794, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_infer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obs), __pyx_ptype_5numpy_ndarray, 1, "obs", 0))) __PYX_ERR(0, 1794, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fltr), __pyx_ptype_5numpy_ndarray, 1, "fltr", 0))) __PYX_ERR(0, 1794, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_72latent_infer(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_param_priors, __pyx_v_init_priors, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_verbose, __pyx_v_verbose_likelihood, __pyx_v_ftol, __pyx_v_global_max_iter, __pyx_v_local_max_iter, __pyx_v_local_initial_step, __pyx_v_global_atol, __pyx_v_enable_global, __pyx_v_enable_local, __pyx_v_cma_processes, __pyx_v_cma_population, __pyx_v_cma_random_seed, __pyx_v_objective, __pyx_v_alternative_guess, __pyx_v_use_mode_as_guess, __pyx_v_tmp_file, __pyx_v_load_backup_file);
 1801:         """
 1802:         Compute the maximum a-posteriori (MAP) estimate for the initial conditions and all desired parameters, including control parameters,
 1803:         for a SIR type model with partially observed classes. The unobserved classes are treated as latent variables.
 1804: 
 1805:         Parameters
 1806:         ----------
 1807:         obs:  np.array
 1808:             The partially observed trajectory.
 1809:         fltr: 2d np.array
 1810:             The filter for the observation such that
 1811:             :math:`F_{ij} x_j (t) = obs_i(t)`
 1812:         Tf: float
 1813:             Total time of the trajectory
 1814:         param_priors: dict
 1815:             A dictionary that specifies priors for parameters (including control parameters, if desired). See `infer` for further explanations.
 1816:         init_priors: dict
 1817:             A dictionary for priors for initial conditions. See below for examples
 1818:         contactMatrix: callable, optional
 1819:             A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.
 1820:             Either a contactMatrix or a generator must be specified.
 1821:         generator: pyross.contactMatrix, optional
 1822:             A pyross.contactMatrix object that generates a contact matrix function with specified lockdown
 1823:             parameters.
 1824:             Either a contactMatrix or a generator must be specified.
 1825:         intervention_fun: callable, optional
 1826:             The calling signature is `intervention_func(t, **kwargs)`,
 1827:             where t is time and kwargs are other keyword arguments for the function.
 1828:             The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.
 1829:             The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.
 1830:             If not set, assume intervention that's constant in time.
 1831:             See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.
 1832:         tangent: bool, optional
 1833:             Set to True to use tangent space inference. Default is false.
 1834:         verbose: bool, optional
 1835:             Set to True to see intermediate outputs from the optimizer.
 1836:         ftol: double
 1837:             Relative tolerance of logp
 1838:         global_max_iter: int, optional
 1839:             Number of global optimisations performed.
 1840:         local_max_iter: int, optional
 1841:             Number of local optimisation performed.
 1842:         local_initital_step: optional, float or np.array
 1843:             Initial step size for the local optimiser. If scalar, relative to the initial guess. 
 1844:             Default: Deterined by final state of global optimiser, or, if enable_global=False, 0.01
 1845:         global_atol: float
 1846:             The absolute tolerance for global minimisation.
 1847:         enable_global: bool, optional
 1848:             Set to True to enable global optimisation.
 1849:         enable_local: bool, optional
 1850:             Set to True to enable local optimisation.
 1851:         cma_processes: int, optional
 1852:             Number of parallel processes used for global optimisation.
 1853:         cma_population: int, optional
 1854:             The number of samples used in each step of the CMA algorithm.
 1855:         cma_random_seed: int (between 0 and 2**32-1)
 1856:             Random seed for the optimisation algorithms. By default it is generated from numpy.random.randint.
 1857:         objective: string, optional
 1858:             Objective for the minimisation. 'likelihood' (default), 'least_square' (least squares fit w.r.t. absolute compartment values), 
 1859:             'least_squares_diff' (least squares fit w.r.t. time-differences of compartment values)
 1860:         alternative_guess: np.array, optional
 1861:             Alternative initial quess, different form the mean of the prior. 
 1862:             Array in the same format as 'flat_params' in the result dictionary of a previous optimisation run.
 1863:         use_mode_as_guess: bool, optional
 1864:             Initialise optimisation with mode instead of mean of the prior. Makes a difference for lognormal distributions. 
 1865:         tmp_file: optional, string
 1866:             If specified, name of a file to store the temporary best estimate of the global optimiser (as backup or for inspection) as numpy array file 
 1867:         load_backup_file: optional, string
 1868:             If specified, name of a file to restore the the state of the global optimiser
 1869: 
 1870:         Returns
 1871:         -------
 1872:         output_dict: dict
 1873:             A dictionary containing the following keys for users:
 1874: 
 1875:             x0: np.array
 1876:                 MAP estimates for the initial conditions
 1877:             params_dict: dict
 1878:                 dictionary for MAP estimates for model parameters
 1879:             control_params_dict: dict
 1880:                 dictionary for MAP estimates for control parameters (if requested)
 1881:             -logp: float
 1882:                 Value of -logp at MAP.
 1883: 
 1884:         Note
 1885:         ----
 1886:         This function combines the functionality of `latent_infer_parameters` and `latent_infer_control`,
 1887:         which will be deprecated.
 1888:         To infer model parameters only, specify a fixed `contactMatrix` function.
 1889:         To infer control parameters only, specify a `generator` and do not specify priors for model parameters.
 1890: 
 1891:         Examples
 1892:         --------
 1893:         Here we list three examples, one for inferring all initial conditions
 1894:         along the fastest growing linear mode, one for inferring the initial
 1895:         conditions individually and a mixed one.
 1896: 
 1897:         First, suppose we only observe Is out of (S, Ia, Is) and we wish to
 1898:         infer all compartmental values of S and Ia independently. For two age
 1899:         groups with population [2500, 7500],
 1900: 
 1901:         >>> init_priors = {
 1902:                 'independent':{
 1903:                     'fltr': [True, True, True, True, False, False],
 1904:                     'mean': [2400, 7400, 50, 50],
 1905:                     'std': [200, 200, 200, 200],
 1906:                     'bounds': [[2000, 2500], [7000, 7500], [0, 400], [0, 400]]
 1907:                 }
 1908:             }
 1909: 
 1910:         In the 'fltr' entry, we need a boolean array indicating which components
 1911:         of the full x0 = [S0[0], S0[1], Ia0[0], Ia0[1], Is0[0], Ia0[1]] array we are inferring.
 1912:         By setting fltr = [True, True, True, True, False, False], the inference algorithm
 1913:         will know that we are inferring all components of S0 and Ia0 but not Is0.
 1914:         Similar to inference for parameter values, we also assume a log-normal
 1915:         distribution for the priors for the initial conditions.
 1916: 
 1917:         Next, if we are happy to assume that all our initial conditions lie
 1918:         along the fastest growing linear mode and we will only infer the
 1919:         coefficient of the mode, the init_priors dict would be,
 1920: 
 1921:         >>> init_priors = {
 1922:                 'lin_mode_coeff':{
 1923:                     'fltr': [True, True, True, True, False, False],
 1924:                     'mean': 100,
 1925:                     'std': 100,
 1926:                     'bounds': [1, 1000]
 1927:                 }
 1928:             }
 1929: 
 1930:         Note that the 'fltr' entry is still the same as before because we still
 1931:         only want to infer S and Ia, and the initial conditions for Is is fixed
 1932:         by the observation.
 1933: 
 1934:         Finally, if we want to do a mixture of both (useful when some compartments
 1935:         have aligned with the fastest growing mode but others haven't), we need
 1936:         to set the init_priors to be,
 1937: 
 1938:         >>> init_priors = {
 1939:                 'lin_mode_coeff': {
 1940:                     'fltr': [True, True, False, False, False, False],
 1941:                     'mean': 100,
 1942:                     'std': 100,
 1943:                     'bounds': [1, 1000]
 1944:                 },
 1945:                 'independent':{
 1946:                     'fltr': [False, False, True, True, False, False],
 1947:                     'mean': [50, 50],
 1948:                     'std': [200, 200],
 1949:                     'bounds': [0, 400], [0, 400]
 1950:                 }
 1951:             }
 1952:         """
 1953: 
 1954:         # Sanity checks of the inputs
+1955:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1955, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1955, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1955, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_intervention_fun);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1955, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1956: 
 1957:         # Process fltr and obs
+1958:         fltr, obs, obs0 = pyross.utils.process_latent_data(fltr, obs)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1958, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1958, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_process_latent_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1958, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, ((PyObject *)__pyx_v_fltr), ((PyObject *)__pyx_v_obs)};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1958, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, ((PyObject *)__pyx_v_fltr), ((PyObject *)__pyx_v_obs)};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1958, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_3 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_v_fltr));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_fltr));
    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_4, ((PyObject *)__pyx_v_fltr));
    __Pyx_INCREF(((PyObject *)__pyx_v_obs));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_obs));
    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_4, ((PyObject *)__pyx_v_obs));
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1958, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_5);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 2; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 3) < 0) __PYX_ERR(0, 1958, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1958, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1958, __pyx_L1_error)
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1958, __pyx_L1_error)
  __Pyx_DECREF_SET(__pyx_v_fltr, ((PyArrayObject *)__pyx_t_2));
  __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_obs, ((PyArrayObject *)__pyx_t_3));
  __pyx_t_3 = 0;
  __pyx_v_obs0 = __pyx_t_5;
  __pyx_t_5 = 0;
 1959: 
 1960:         # Read in parameter priors
+1961:         param_prior_names, keys, param_mean, param_stds, param_guess, param_guess_std, param_bounds, param_guess_range, \
  __pyx_v_param_prior_names = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_keys = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_param_mean = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_param_stds = __pyx_t_6;
  __pyx_t_6 = 0;
  __pyx_v_param_guess = __pyx_t_8;
  __pyx_t_8 = 0;
  __pyx_v_param_guess_std = __pyx_t_9;
  __pyx_t_9 = 0;
  __pyx_v_param_bounds = __pyx_t_10;
  __pyx_t_10 = 0;
  __pyx_v_param_guess_range = __pyx_t_11;
  __pyx_t_11 = 0;
  __pyx_v_is_scale_parameter = __pyx_t_12;
  __pyx_t_12 = 0;
  __pyx_v_scaled_param_guesses = __pyx_t_13;
  __pyx_t_13 = 0;
 1962:         is_scale_parameter, scaled_param_guesses \
+1963:             = pyross.utils.parse_param_prior_dict(param_priors, self.M, check_length=(not self.param_mapping_enabled))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyross); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_parse_param_prior_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_self->M); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_param_priors);
  __Pyx_GIVEREF(__pyx_v_param_priors);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_param_priors);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyBool_FromLong((!(__pyx_v_self->param_mapping_enabled != 0))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_check_length, __pyx_t_2) < 0) __PYX_ERR(0, 1963, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 10)) {
      if (size > 10) __Pyx_RaiseTooManyValuesError(10);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1961, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 5); 
      __pyx_t_10 = PyTuple_GET_ITEM(sequence, 6); 
      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 7); 
      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 8); 
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 9); 
    } else {
      __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 5); 
      __pyx_t_10 = PyList_GET_ITEM(sequence, 6); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 7); 
      __pyx_t_12 = PyList_GET_ITEM(sequence, 8); 
      __pyx_t_13 = PyList_GET_ITEM(sequence, 9); 
    }
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_t_12);
    __Pyx_INCREF(__pyx_t_13);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[10] = {&__pyx_t_5,&__pyx_t_3,&__pyx_t_1,&__pyx_t_6,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12,&__pyx_t_13};
      for (i=0; i < 10; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1961, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[10] = {&__pyx_t_5,&__pyx_t_3,&__pyx_t_1,&__pyx_t_6,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12,&__pyx_t_13};
    __pyx_t_14 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1961, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_14)->tp_iternext;
    for (index=0; index < 10; index++) {
      PyObject* item = __pyx_t_7(__pyx_t_14); if (unlikely(!item)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_14), 10) < 0) __PYX_ERR(0, 1961, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1961, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
 1964: 
 1965:         # Read in initial conditions priors
+1966:         init_prior_names, init_mean, init_stds, init_guess, init_guess_std, init_bounds, init_flags, init_fltrs \
  __pyx_v_init_prior_names = __pyx_t_13;
  __pyx_t_13 = 0;
  __pyx_v_init_mean = __pyx_t_9;
  __pyx_t_9 = 0;
  __pyx_v_init_stds = __pyx_t_11;
  __pyx_t_11 = 0;
  __pyx_v_init_guess = __pyx_t_12;
  __pyx_t_12 = 0;
  __pyx_v_init_guess_std = __pyx_t_10;
  __pyx_t_10 = 0;
  __pyx_v_init_bounds = __pyx_t_8;
  __pyx_t_8 = 0;
  __pyx_v_init_flags = __pyx_t_6;
  __pyx_t_6 = 0;
  __pyx_v_init_fltrs = __pyx_t_1;
  __pyx_t_1 = 0;
+1967:             = pyross.utils.parse_init_prior_dict(init_priors, self.dim, len(obs0))
  __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_pyross); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1967, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_utils); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1967, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_parse_init_prior_dict); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1967, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1967, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_15 = PyObject_Length(__pyx_v_obs0); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1967, __pyx_L1_error)
  __pyx_t_11 = PyInt_FromSsize_t(__pyx_t_15); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1967, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_10 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_13);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_13, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_13)) {
    PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_v_init_priors, __pyx_t_12, __pyx_t_11};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1967, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_13)) {
    PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_v_init_priors, __pyx_t_12, __pyx_t_11};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1967, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1967, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_10) {
      __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_10); __pyx_t_10 = NULL;
    }
    __Pyx_INCREF(__pyx_v_init_priors);
    __Pyx_GIVEREF(__pyx_v_init_priors);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_4, __pyx_v_init_priors);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_4, __pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_4, __pyx_t_11);
    __pyx_t_12 = 0;
    __pyx_t_11 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1967, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 8)) {
      if (size > 8) __Pyx_RaiseTooManyValuesError(8);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1966, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_10 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 5); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 6); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 7); 
    } else {
      __pyx_t_13 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_12 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_10 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 5); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 6); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 7); 
    }
    __Pyx_INCREF(__pyx_t_13);
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_t_12);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_1);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[8] = {&__pyx_t_13,&__pyx_t_9,&__pyx_t_11,&__pyx_t_12,&__pyx_t_10,&__pyx_t_8,&__pyx_t_6,&__pyx_t_1};
      for (i=0; i < 8; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1966, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[8] = {&__pyx_t_13,&__pyx_t_9,&__pyx_t_11,&__pyx_t_12,&__pyx_t_10,&__pyx_t_8,&__pyx_t_6,&__pyx_t_1};
    __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1966, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext;
    for (index=0; index < 8; index++) {
      PyObject* item = __pyx_t_7(__pyx_t_3); if (unlikely(!item)) goto __pyx_L7_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_3), 8) < 0) __PYX_ERR(0, 1966, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_unpacking_done;
    __pyx_L7_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1966, __pyx_L1_error)
    __pyx_L8_unpacking_done:;
  }
 1968: 
 1969:         # Concatenate the flattend parameter guess with init guess
+1970:         param_length = param_guess.shape[0]
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_param_guess, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1970, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1970, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_param_length = __pyx_t_1;
  __pyx_t_1 = 0;
+1971:         mean = np.concatenate([param_mean, init_mean]).astype(DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1971, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1971, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1971, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_v_param_mean);
  __Pyx_GIVEREF(__pyx_v_param_mean);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_v_param_mean);
  __Pyx_INCREF(__pyx_v_init_mean);
  __Pyx_GIVEREF(__pyx_v_init_mean);
  PyList_SET_ITEM(__pyx_t_6, 1, __pyx_v_init_mean);
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  __pyx_t_2 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_10, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1971, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_astype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1971, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1971, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_6, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1971, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_mean = __pyx_t_1;
  __pyx_t_1 = 0;
+1972:         stds = np.concatenate([param_stds,init_stds]).astype(DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_param_stds);
  __Pyx_GIVEREF(__pyx_v_param_stds);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_v_param_stds);
  __Pyx_INCREF(__pyx_v_init_stds);
  __Pyx_GIVEREF(__pyx_v_init_stds);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_v_init_stds);
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_10, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_astype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_8);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_stds = __pyx_t_1;
  __pyx_t_1 = 0;
+1973:         if use_mode_as_guess:
  __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_v_use_mode_as_guess); if (unlikely(__pyx_t_16 < 0)) __PYX_ERR(0, 1973, __pyx_L1_error)
  if (__pyx_t_16) {
/* … */
    goto __pyx_L9;
  }
+1974:             guess = np.concatenate([param_guess, init_guess]).astype(DTYPE)
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyList_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_v_param_guess);
    __Pyx_GIVEREF(__pyx_v_param_guess);
    PyList_SET_ITEM(__pyx_t_8, 0, __pyx_v_param_guess);
    __Pyx_INCREF(__pyx_v_init_guess);
    __Pyx_GIVEREF(__pyx_v_init_guess);
    PyList_SET_ITEM(__pyx_t_8, 1, __pyx_v_init_guess);
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_6 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_10, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_8);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_astype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_guess = __pyx_t_1;
    __pyx_t_1 = 0;
+1975:             guess_std = np.concatenate([param_guess_std,init_guess_std]).astype(DTYPE)
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_v_param_guess_std);
    __Pyx_GIVEREF(__pyx_v_param_guess_std);
    PyList_SET_ITEM(__pyx_t_6, 0, __pyx_v_param_guess_std);
    __Pyx_INCREF(__pyx_v_init_guess_std);
    __Pyx_GIVEREF(__pyx_v_init_guess_std);
    PyList_SET_ITEM(__pyx_t_6, 1, __pyx_v_init_guess_std);
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_2 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_10, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_astype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_6, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_2);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_v_guess_std = __pyx_t_1;
    __pyx_t_1 = 0;
 1976:         else:
+1977:             guess = mean
  /*else*/ {
    __Pyx_INCREF(__pyx_v_mean);
    __pyx_v_guess = __pyx_v_mean;
+1978:             guess_std =stds
    __Pyx_INCREF(__pyx_v_stds);
    __pyx_v_guess_std = __pyx_v_stds;
  }
  __pyx_L9:;
 1979: 
+1980:         bounds = np.concatenate([param_bounds, init_bounds], axis=0).astype(DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyList_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_INCREF(__pyx_v_param_bounds);
  __Pyx_GIVEREF(__pyx_v_param_bounds);
  PyList_SET_ITEM(__pyx_t_8, 0, __pyx_v_param_bounds);
  __Pyx_INCREF(__pyx_v_init_bounds);
  __Pyx_GIVEREF(__pyx_v_init_bounds);
  PyList_SET_ITEM(__pyx_t_8, 1, __pyx_v_init_bounds);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_8);
  __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 1980, __pyx_L1_error)
  __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_astype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_6, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_10);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_bounds = __pyx_t_1;
  __pyx_t_1 = 0;
 1981: 
+1982:         prior = Prior(param_prior_names+init_prior_names, bounds, mean, stds)
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_Prior); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1982, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_10 = PyNumber_Add(__pyx_v_param_prior_names, __pyx_v_init_prior_names); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1982, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_6 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[5] = {__pyx_t_6, __pyx_t_10, __pyx_v_bounds, __pyx_v_mean, __pyx_v_stds};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1982, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[5] = {__pyx_t_6, __pyx_t_10, __pyx_v_bounds, __pyx_v_mean, __pyx_v_stds};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1982, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  {
    __pyx_t_2 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_4, __pyx_t_10);
    __Pyx_INCREF(__pyx_v_bounds);
    __Pyx_GIVEREF(__pyx_v_bounds);
    PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_4, __pyx_v_bounds);
    __Pyx_INCREF(__pyx_v_mean);
    __Pyx_GIVEREF(__pyx_v_mean);
    PyTuple_SET_ITEM(__pyx_t_2, 2+__pyx_t_4, __pyx_v_mean);
    __Pyx_INCREF(__pyx_v_stds);
    __Pyx_GIVEREF(__pyx_v_stds);
    PyTuple_SET_ITEM(__pyx_t_2, 3+__pyx_t_4, __pyx_v_stds);
    __pyx_t_10 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_prior = __pyx_t_1;
  __pyx_t_1 = 0;
 1983: 
+1984:         cma_stds = np.minimum(guess_std, (bounds[:, 1]-bounds[:, 0])/3)
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_minimum); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_bounds, __pyx_tuple__3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_10 = __Pyx_PyObject_GetItem(__pyx_v_bounds, __pyx_tuple__2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_6 = PyNumber_Subtract(__pyx_t_8, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyInt_TrueDivideObjC(__pyx_t_6, __pyx_int_3, 3, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_guess_std, __pyx_t_10};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1984, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_guess_std, __pyx_t_10};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1984, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1984, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_INCREF(__pyx_v_guess_std);
    __Pyx_GIVEREF(__pyx_v_guess_std);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_4, __pyx_v_guess_std);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_4, __pyx_t_10);
    __pyx_t_10 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1984, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_cma_stds = __pyx_t_1;
  __pyx_t_1 = 0;
 1985: 
+1986:         if alternative_guess is not None:
  __pyx_t_16 = (__pyx_v_alternative_guess != Py_None);
  __pyx_t_17 = (__pyx_t_16 != 0);
  if (__pyx_t_17) {
/* … */
  }
+1987:             guess = alternative_guess
    __Pyx_INCREF(__pyx_v_alternative_guess);
    __Pyx_DECREF_SET(__pyx_v_guess, __pyx_v_alternative_guess);
 1988: 
+1989:         minimize_args = {'generator':generator, 'intervention_fun':intervention_fun,
  __pyx_t_1 = __Pyx_PyDict_NewPresized(17); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_generator, __pyx_v_generator) < 0) __PYX_ERR(0, 1989, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_intervention_fun, __pyx_v_intervention_fun) < 0) __PYX_ERR(0, 1989, __pyx_L1_error)
+1990:                        'param_keys':keys, 'param_guess_range':param_guess_range,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_param_keys, __pyx_v_keys) < 0) __PYX_ERR(0, 1989, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_param_guess_range, __pyx_v_param_guess_range) < 0) __PYX_ERR(0, 1989, __pyx_L1_error)
+1991:                        'is_scale_parameter':is_scale_parameter,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_is_scale_parameter, __pyx_v_is_scale_parameter) < 0) __PYX_ERR(0, 1989, __pyx_L1_error)
+1992:                        'scaled_param_guesses':scaled_param_guesses,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_scaled_param_guesses, __pyx_v_scaled_param_guesses) < 0) __PYX_ERR(0, 1989, __pyx_L1_error)
+1993:                        'param_length':param_length,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_param_length, __pyx_v_param_length) < 0) __PYX_ERR(0, 1989, __pyx_L1_error)
+1994:                        'obs':obs, 'fltr':fltr, 'Tf':Tf, 'obs0':obs0,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_obs, ((PyObject *)__pyx_v_obs)) < 0) __PYX_ERR(0, 1989, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_fltr, ((PyObject *)__pyx_v_fltr)) < 0) __PYX_ERR(0, 1989, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_Tf, __pyx_v_Tf) < 0) __PYX_ERR(0, 1989, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_obs0, __pyx_v_obs0) < 0) __PYX_ERR(0, 1989, __pyx_L1_error)
+1995:                        'init_flags':init_flags, 'init_fltrs': init_fltrs,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_init_flags, __pyx_v_init_flags) < 0) __PYX_ERR(0, 1989, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_init_fltrs, __pyx_v_init_fltrs) < 0) __PYX_ERR(0, 1989, __pyx_L1_error)
+1996:                        'prior':prior, 'tangent':tangent, 'objective':objective, 'verbose_likelihood':verbose_likelihood}
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_prior, __pyx_v_prior) < 0) __PYX_ERR(0, 1989, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_tangent, __pyx_v_tangent) < 0) __PYX_ERR(0, 1989, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_objective, __pyx_v_objective) < 0) __PYX_ERR(0, 1989, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_verbose_likelihood, __pyx_v_verbose_likelihood) < 0) __PYX_ERR(0, 1989, __pyx_L1_error)
  __pyx_v_minimize_args = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+1997:         res = minimization(self._latent_infer_to_minimize,
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_minimization); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_latent_infer_to_minimize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
  __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);
  __Pyx_INCREF(__pyx_v_guess);
  __Pyx_GIVEREF(__pyx_v_guess);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_guess);
  __Pyx_INCREF(__pyx_v_bounds);
  __Pyx_GIVEREF(__pyx_v_bounds);
  PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_bounds);
  __pyx_t_2 = 0;
/* … */
  __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_res = __pyx_t_10;
  __pyx_t_10 = 0;
+1998:                           guess, bounds, ftol=ftol,
  __pyx_t_2 = __Pyx_PyDict_NewPresized(15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_ftol, __pyx_v_ftol) < 0) __PYX_ERR(0, 1998, __pyx_L1_error)
+1999:                           global_max_iter=global_max_iter,
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_global_max_iter, __pyx_v_global_max_iter) < 0) __PYX_ERR(0, 1998, __pyx_L1_error)
+2000:                           local_max_iter=local_max_iter, local_initial_step=local_initial_step, global_atol=global_atol,
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_local_max_iter, __pyx_v_local_max_iter) < 0) __PYX_ERR(0, 1998, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_local_initial_step, __pyx_v_local_initial_step) < 0) __PYX_ERR(0, 1998, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_global_atol, __pyx_v_global_atol) < 0) __PYX_ERR(0, 1998, __pyx_L1_error)
+2001:                           enable_global=enable_global, enable_local=enable_local,
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_enable_global, __pyx_v_enable_global) < 0) __PYX_ERR(0, 1998, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_enable_local, __pyx_v_enable_local) < 0) __PYX_ERR(0, 1998, __pyx_L1_error)
+2002:                           cma_processes=cma_processes,
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_cma_processes, __pyx_v_cma_processes) < 0) __PYX_ERR(0, 1998, __pyx_L1_error)
+2003:                           cma_population=cma_population, cma_stds=cma_stds,
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_cma_population, __pyx_v_cma_population) < 0) __PYX_ERR(0, 1998, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_cma_stds, __pyx_v_cma_stds) < 0) __PYX_ERR(0, 1998, __pyx_L1_error)
+2004:                           verbose=verbose, cma_random_seed=cma_random_seed,
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_verbose, __pyx_v_verbose) < 0) __PYX_ERR(0, 1998, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_cma_random_seed, __pyx_v_cma_random_seed) < 0) __PYX_ERR(0, 1998, __pyx_L1_error)
+2005:                           args_dict=minimize_args, tmp_file=tmp_file, load_backup_file=load_backup_file)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_args_dict, __pyx_v_minimize_args) < 0) __PYX_ERR(0, 1998, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_tmp_file, __pyx_v_tmp_file) < 0) __PYX_ERR(0, 1998, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_load_backup_file, __pyx_v_load_backup_file) < 0) __PYX_ERR(0, 1998, __pyx_L1_error)
+2006:         estimates = res[0]
  __pyx_t_10 = __Pyx_GetItemInt(__pyx_v_res, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2006, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_v_estimates = __pyx_t_10;
  __pyx_t_10 = 0;
 2007: 
 2008:         # Get the parameters (in their original structure) from the flattened parameter vector.
+2009:         param_estimates = estimates[:param_length]
  __pyx_t_10 = __Pyx_PyObject_GetSlice(__pyx_v_estimates, 0, 0, NULL, &__pyx_v_param_length, NULL, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2009, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_v_param_estimates = __pyx_t_10;
  __pyx_t_10 = 0;
+2010:         orig_params = pyross.utils.unflatten_parameters(param_estimates,
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_unflatten_parameters); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 2011:                                                       param_guess_range,
 2012:                                                       is_scale_parameter,
+2013:                                                       scaled_param_guesses)
  __pyx_t_8 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[5] = {__pyx_t_8, __pyx_v_param_estimates, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses};
    __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2010, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_10);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[5] = {__pyx_t_8, __pyx_v_param_estimates, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses};
    __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2010, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_10);
  } else
  #endif
  {
    __pyx_t_1 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2010, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (__pyx_t_8) {
      __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8); __pyx_t_8 = NULL;
    }
    __Pyx_INCREF(__pyx_v_param_estimates);
    __Pyx_GIVEREF(__pyx_v_param_estimates);
    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_4, __pyx_v_param_estimates);
    __Pyx_INCREF(__pyx_v_param_guess_range);
    __Pyx_GIVEREF(__pyx_v_param_guess_range);
    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_4, __pyx_v_param_guess_range);
    __Pyx_INCREF(__pyx_v_is_scale_parameter);
    __Pyx_GIVEREF(__pyx_v_is_scale_parameter);
    PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_4, __pyx_v_is_scale_parameter);
    __Pyx_INCREF(__pyx_v_scaled_param_guesses);
    __Pyx_GIVEREF(__pyx_v_scaled_param_guesses);
    PyTuple_SET_ITEM(__pyx_t_1, 3+__pyx_t_4, __pyx_v_scaled_param_guesses);
    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2010, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_orig_params = __pyx_t_10;
  __pyx_t_10 = 0;
+2014:         init_estimates = estimates[param_length:]
  __pyx_t_10 = __Pyx_PyObject_GetSlice(__pyx_v_estimates, 0, 0, &__pyx_v_param_length, NULL, NULL, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2014, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_v_init_estimates = __pyx_t_10;
  __pyx_t_10 = 0;
 2015: 
 2016: 
+2017:         map_params_dict, map_control_params_dict = self.fill_params_dict(keys, orig_params, return_additional_params=True)
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_fill_params_dict); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2017, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2017, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_keys);
  __Pyx_GIVEREF(__pyx_v_keys);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_keys);
  __Pyx_INCREF(__pyx_v_orig_params);
  __Pyx_GIVEREF(__pyx_v_orig_params);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_orig_params);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2017, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_return_additional_params, Py_True) < 0) __PYX_ERR(0, 2017, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2017, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) {
    PyObject* sequence = __pyx_t_8;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2017, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_2);
    #else
    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2017, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2017, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_10 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2017, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_10)->tp_iternext;
    index = 0; __pyx_t_1 = __pyx_t_7(__pyx_t_10); if (unlikely(!__pyx_t_1)) goto __pyx_L11_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_2 = __pyx_t_7(__pyx_t_10); if (unlikely(!__pyx_t_2)) goto __pyx_L11_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_10), 2) < 0) __PYX_ERR(0, 2017, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    goto __pyx_L12_unpacking_done;
    __pyx_L11_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2017, __pyx_L1_error)
    __pyx_L12_unpacking_done:;
  }
  __pyx_v_map_params_dict = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_map_control_params_dict = __pyx_t_2;
  __pyx_t_2 = 0;
+2018:         self.set_params(map_params_dict)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_params); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2018, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_8 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_v_map_params_dict) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_map_params_dict);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2018, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 2019: 
+2020:         if generator is not None:
  __pyx_t_17 = (__pyx_v_generator != Py_None);
  __pyx_t_16 = (__pyx_t_17 != 0);
  if (__pyx_t_16) {
/* … */
  }
+2021:             if intervention_fun is None:
    __pyx_t_16 = (__pyx_v_intervention_fun == Py_None);
    __pyx_t_17 = (__pyx_t_16 != 0);
    if (__pyx_t_17) {
/* … */
      goto __pyx_L14;
    }
+2022:                 self.contactMatrix = generator.constant_contactMatrix(**map_control_params_dict)
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_constant_contactMatrix); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2022, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (unlikely(__pyx_v_map_control_params_dict == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
        __PYX_ERR(0, 2022, __pyx_L1_error)
      }
      if (likely(PyDict_CheckExact(__pyx_v_map_control_params_dict))) {
        __pyx_t_2 = PyDict_Copy(__pyx_v_map_control_params_dict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2022, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      } else {
        __pyx_t_2 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_map_control_params_dict, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2022, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2022, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_v_self->contactMatrix);
      __Pyx_DECREF(__pyx_v_self->contactMatrix);
      __pyx_v_self->contactMatrix = __pyx_t_1;
      __pyx_t_1 = 0;
 2023:             else:
+2024:                 self.contactMatrix = generator.intervention_custom_temporal(intervention_fun, **map_control_params_dict)
    /*else*/ {
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_intervention_custom_temporal); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2024, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2024, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_v_intervention_fun);
      __Pyx_GIVEREF(__pyx_v_intervention_fun);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_intervention_fun);
      if (unlikely(__pyx_v_map_control_params_dict == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
        __PYX_ERR(0, 2024, __pyx_L1_error)
      }
      if (likely(PyDict_CheckExact(__pyx_v_map_control_params_dict))) {
        __pyx_t_8 = PyDict_Copy(__pyx_v_map_control_params_dict); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2024, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
      } else {
        __pyx_t_8 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_map_control_params_dict, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2024, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
      }
      __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2024, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GIVEREF(__pyx_t_10);
      __Pyx_GOTREF(__pyx_v_self->contactMatrix);
      __Pyx_DECREF(__pyx_v_self->contactMatrix);
      __pyx_v_self->contactMatrix = __pyx_t_10;
      __pyx_t_10 = 0;
    }
    __pyx_L14:;
+2025:         map_x0 = self._construct_inits(init_estimates, init_flags, init_fltrs,
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_construct_inits); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2025, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
+2026:                                     obs0, fltr[0])
  __pyx_t_2 = __Pyx_GetItemInt(((PyObject *)__pyx_v_fltr), 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2026, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[6] = {__pyx_t_1, __pyx_v_init_estimates, __pyx_v_init_flags, __pyx_v_init_fltrs, __pyx_v_obs0, __pyx_t_2};
    __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2025, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[6] = {__pyx_t_1, __pyx_v_init_estimates, __pyx_v_init_flags, __pyx_v_init_fltrs, __pyx_v_obs0, __pyx_t_2};
    __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2025, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(5+__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2025, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_1) {
      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); __pyx_t_1 = NULL;
    }
    __Pyx_INCREF(__pyx_v_init_estimates);
    __Pyx_GIVEREF(__pyx_v_init_estimates);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_4, __pyx_v_init_estimates);
    __Pyx_INCREF(__pyx_v_init_flags);
    __Pyx_GIVEREF(__pyx_v_init_flags);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_4, __pyx_v_init_flags);
    __Pyx_INCREF(__pyx_v_init_fltrs);
    __Pyx_GIVEREF(__pyx_v_init_fltrs);
    PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_4, __pyx_v_init_fltrs);
    __Pyx_INCREF(__pyx_v_obs0);
    __Pyx_GIVEREF(__pyx_v_obs0);
    PyTuple_SET_ITEM(__pyx_t_6, 3+__pyx_t_4, __pyx_v_obs0);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_6, 4+__pyx_t_4, __pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_6, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2025, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_map_x0 = __pyx_t_10;
  __pyx_t_10 = 0;
+2027:         l_post = -res[1]
  __pyx_t_10 = __Pyx_GetItemInt(__pyx_v_res, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2027, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_8 = PyNumber_Negative(__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2027, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_v_l_post = __pyx_t_8;
  __pyx_t_8 = 0;
+2028:         l_prior = np.sum(prior.logpdf(res[0]))
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2028, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_sum); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2028, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_prior, __pyx_n_s_logpdf); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2028, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_res, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2028, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_12 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_10 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_12, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2028, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_8 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_10);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2028, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_l_prior = __pyx_t_8;
  __pyx_t_8 = 0;
+2029:         l_like = l_post - l_prior
  __pyx_t_8 = PyNumber_Subtract(__pyx_v_l_post, __pyx_v_l_prior); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2029, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_v_l_like = __pyx_t_8;
  __pyx_t_8 = 0;
 2030:         output_dict = {
+2031:             'params_dict':map_params_dict, 'x0':map_x0, 'flat_params':estimates,
  __pyx_t_8 = __Pyx_PyDict_NewPresized(14); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2031, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_params_dict, __pyx_v_map_params_dict) < 0) __PYX_ERR(0, 2031, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_x0, __pyx_v_map_x0) < 0) __PYX_ERR(0, 2031, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_flat_params, __pyx_v_estimates) < 0) __PYX_ERR(0, 2031, __pyx_L1_error)
+2032:             'log_posterior':l_post, 'log_prior':l_prior, 'log_likelihood':l_like,
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_log_posterior, __pyx_v_l_post) < 0) __PYX_ERR(0, 2031, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_log_prior, __pyx_v_l_prior) < 0) __PYX_ERR(0, 2031, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_log_likelihood, __pyx_v_l_like) < 0) __PYX_ERR(0, 2031, __pyx_L1_error)
+2033:             'param_keys': keys, 'param_guess_range': param_guess_range,
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_param_keys, __pyx_v_keys) < 0) __PYX_ERR(0, 2031, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_param_guess_range, __pyx_v_param_guess_range) < 0) __PYX_ERR(0, 2031, __pyx_L1_error)
+2034:             'is_scale_parameter':is_scale_parameter, 'param_length':param_length,
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_is_scale_parameter, __pyx_v_is_scale_parameter) < 0) __PYX_ERR(0, 2031, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_param_length, __pyx_v_param_length) < 0) __PYX_ERR(0, 2031, __pyx_L1_error)
+2035:             'scaled_param_guesses':scaled_param_guesses,
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_scaled_param_guesses, __pyx_v_scaled_param_guesses) < 0) __PYX_ERR(0, 2031, __pyx_L1_error)
+2036:             'init_flags': init_flags, 'init_fltrs': init_fltrs,
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_init_flags, __pyx_v_init_flags) < 0) __PYX_ERR(0, 2031, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_init_fltrs, __pyx_v_init_fltrs) < 0) __PYX_ERR(0, 2031, __pyx_L1_error)
+2037:             'prior': prior,
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_prior, __pyx_v_prior) < 0) __PYX_ERR(0, 2031, __pyx_L1_error)
  __pyx_v_output_dict = ((PyObject*)__pyx_t_8);
  __pyx_t_8 = 0;
 2038:         }
+2039:         if map_control_params_dict != {}:
  __pyx_t_8 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2039, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_6 = PyObject_RichCompare(__pyx_v_map_control_params_dict, __pyx_t_8, Py_NE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2039, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_17 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 2039, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_17) {
/* … */
  }
+2040:             output_dict['control_params_dict'] = map_control_params_dict
    if (unlikely(PyDict_SetItem(__pyx_v_output_dict, __pyx_n_u_control_params_dict, __pyx_v_map_control_params_dict) < 0)) __PYX_ERR(0, 2040, __pyx_L1_error)
 2041: 
+2042:         return output_dict
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_output_dict);
  __pyx_r = __pyx_v_output_dict;
  goto __pyx_L0;
 2043: 
+2044:     def latent_infer_nested_sampling(self, np.ndarray obs, np.ndarray fltr, Tf, param_priors, init_priors, contactMatrix=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_75latent_infer_nested_sampling(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_74latent_infer_nested_sampling[] = "\n        Compute the log-evidence and weighted samples for the initial conditions and all desired parameters, including control parameters,\n        for a SIR type model with partially observed classes. This function uses nested sampling as implemented in the `dynesty` Python package.\n\n        Parameters\n        ----------\n        obs: 2d numpy.array\n            The observed trajectories with reduced number of variables\n            (number of data points, (age groups * observed model classes))\n        fltr: 2d numpy.array\n            A matrix of shape (no. observed variables, no. total variables),\n            such that obs_{ti} = fltr_{ij} * X_{tj}\n        Tf: float\n            Total time of the trajectory\n        contactMatrix: callable\n            A function that returns the contact matrix at time t (input).\n        param_priors: dict\n            A dictionary for priors for the model parameters.\n            See `latent_infer` for further explanations.\n        init_priors: dict\n            A dictionary for priors for the initial conditions.\n            See `latent_infer` for further explanations.\n        contactMatrix: callable, optional\n            A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.\n            Either a contactMatrix or a generator must be specified.\n        generator: pyross.contactMatrix, optional\n            A pyross.contactMatrix object that generates a contact matrix function with specified lockdown\n            parameters.\n            Either a contactMatrix or a generator must be specified.\n        intervention_fun: callable, optional\n            The calling signature is `intervention_func(t, **kwargs)`,\n            where t is time and kwargs are other keyword arguments for the function.\n            The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.\n            The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij}"" aW[1]_j` etc.\n            If not set, assume intervention that's constant in time.\n            See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.\n        tangent: bool, optional\n            Set to True to do inference in tangent space (might be less robust but a lot faster). Default is False.\n        verbose: bool, optional\n            Set to True to see intermediate outputs from the nested sampling procedure.\n        nprocesses: int, optional\n            The number of processes used for parallel evaluation of the likelihood.\n        queue_size: int, optional\n            Size of internal queue of likelihood values, default is nprocesses if multiprocessing is used.\n        maxiter: int, optional\n            The maximum number of iterations. Default is no limit.\n        maxcall:int, optional\n            The maximum number of calls to the likelihood function. Default no limit.\n        dlogz: float, optional\n            The iteration terminates if the estimated contribution of the remaining prior volume to the total evidence\n            falls below this threshold. Default value is `1e-3 * (nlive - 1) + 0.01` if `add_live==True`, 0.01 otherwise.\n        n_effective: float, optional\n            The iteration terminates if the number of effective posterior samples reaches this values. Default is no limit.\n        add_live: bool, optional\n            Determines whether to add the remaining set of live points to the set of samples. Default is True.\n        sampler: dynesty.NestedSampler, optional\n            Continue running an instance of a nested sampler until the termination criteria are met.\n        **dynesty_args:\n            Arguments passed through to the construction of the dynesty.NestedSampler constructor. Relevant entries\n            are (this is not comprehensive, for details see the documentation of dynesty):\n\n            nlive: int, optional\n                The number of live points. Default is 500.""\n            bound: {'none', 'single', 'multi', 'balls', 'cubes'}, optional\n                Method used to approximately bound the prior using the current set of live points. Default is 'multi'.\n            sample:  {'auto', 'unif', 'rwalk', 'rstagger', 'slice', 'rslice', 'hslice', callable}, optional\n                Method used to sample uniformly within the likelihood constraint, conditioned on the provided bounds.\n\n        Returns\n        -------\n        sampler: dynesty.NestedSampler\n            The state of the sampler after termination of the nested sampling run.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_75latent_infer_nested_sampling(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_obs = 0;
  PyArrayObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_param_priors = 0;
  PyObject *__pyx_v_init_priors = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_verbose = 0;
  PyObject *__pyx_v_nprocesses = 0;
  PyObject *__pyx_v_queue_size = 0;
  PyObject *__pyx_v_maxiter = 0;
  PyObject *__pyx_v_maxcall = 0;
  PyObject *__pyx_v_dlogz = 0;
  PyObject *__pyx_v_n_effective = 0;
  PyObject *__pyx_v_add_live = 0;
  PyObject *__pyx_v_sampler = 0;
  PyObject *__pyx_v_dynesty_args = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_infer_nested_sampling (wrapper)", 0);
  __pyx_v_dynesty_args = PyDict_New(); if (unlikely(!__pyx_v_dynesty_args)) return NULL;
  __Pyx_GOTREF(__pyx_v_dynesty_args);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_param_priors,&__pyx_n_s_init_priors,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_tangent,&__pyx_n_s_verbose,&__pyx_n_s_nprocesses,&__pyx_n_s_queue_size,&__pyx_n_s_maxiter,&__pyx_n_s_maxcall,&__pyx_n_s_dlogz,&__pyx_n_s_n_effective,&__pyx_n_s_add_live,&__pyx_n_s_sampler,0};
    PyObject* values[18] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[5] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dynesty_args);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_74latent_infer_nested_sampling(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyArrayObject *__pyx_v_obs, PyArrayObject *__pyx_v_fltr, PyObject *__pyx_v_Tf, PyObject *__pyx_v_param_priors, PyObject *__pyx_v_init_priors, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_tangent, PyObject *__pyx_v_verbose, PyObject *__pyx_v_nprocesses, PyObject *__pyx_v_queue_size, PyObject *__pyx_v_maxiter, PyObject *__pyx_v_maxcall, PyObject *__pyx_v_dlogz, PyObject *__pyx_v_n_effective, PyObject *__pyx_v_add_live, PyObject *__pyx_v_sampler, PyObject *__pyx_v_dynesty_args) {
  PyObject *__pyx_v_obs0 = NULL;
  PyObject *__pyx_v_param_prior_names = NULL;
  PyObject *__pyx_v_keys = NULL;
  PyObject *__pyx_v_param_guess = NULL;
  PyObject *__pyx_v_param_stds = NULL;
  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
  PyObject *__pyx_v_param_bounds = NULL;
  PyObject *__pyx_v_param_guess_range = NULL;
  PyObject *__pyx_v_is_scale_parameter = NULL;
  PyObject *__pyx_v_scaled_param_guesses = NULL;
  PyObject *__pyx_v_init_prior_names = NULL;
  PyObject *__pyx_v_init_guess = NULL;
  PyObject *__pyx_v_init_stds = NULL;
  PyObject *__pyx_v_init_bounds = NULL;
  PyObject *__pyx_v_init_flags = NULL;
  PyObject *__pyx_v_init_fltrs = NULL;
  PyObject *__pyx_v_param_length = NULL;
  PyObject *__pyx_v_guess = NULL;
  PyObject *__pyx_v_stds = NULL;
  PyObject *__pyx_v_bounds = NULL;
  PyObject *__pyx_v_prior = NULL;
  Py_ssize_t __pyx_v_ndim;
  PyObject *__pyx_v_prior_transform_args = NULL;
  PyObject *__pyx_v_loglike_args = NULL;
  PyObject *__pyx_v_pool = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_infer_nested_sampling", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_obs);
  __Pyx_INCREF((PyObject *)__pyx_v_fltr);
  __Pyx_INCREF(__pyx_v_nprocesses);
  __Pyx_INCREF(__pyx_v_queue_size);
  __Pyx_INCREF(__pyx_v_sampler);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_infer_nested_sampling", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_obs0);
  __Pyx_XDECREF(__pyx_v_param_prior_names);
  __Pyx_XDECREF(__pyx_v_keys);
  __Pyx_XDECREF(__pyx_v_param_guess);
  __Pyx_XDECREF(__pyx_v_param_stds);
  __Pyx_XDECREF(__pyx_v__);
  __Pyx_XDECREF(__pyx_v_param_bounds);
  __Pyx_XDECREF(__pyx_v_param_guess_range);
  __Pyx_XDECREF(__pyx_v_is_scale_parameter);
  __Pyx_XDECREF(__pyx_v_scaled_param_guesses);
  __Pyx_XDECREF(__pyx_v_init_prior_names);
  __Pyx_XDECREF(__pyx_v_init_guess);
  __Pyx_XDECREF(__pyx_v_init_stds);
  __Pyx_XDECREF(__pyx_v_init_bounds);
  __Pyx_XDECREF(__pyx_v_init_flags);
  __Pyx_XDECREF(__pyx_v_init_fltrs);
  __Pyx_XDECREF(__pyx_v_param_length);
  __Pyx_XDECREF(__pyx_v_guess);
  __Pyx_XDECREF(__pyx_v_stds);
  __Pyx_XDECREF(__pyx_v_bounds);
  __Pyx_XDECREF(__pyx_v_prior);
  __Pyx_XDECREF(__pyx_v_prior_transform_args);
  __Pyx_XDECREF(__pyx_v_loglike_args);
  __Pyx_XDECREF(__pyx_v_pool);
  __Pyx_XDECREF((PyObject *)__pyx_v_obs);
  __Pyx_XDECREF((PyObject *)__pyx_v_fltr);
  __Pyx_XDECREF(__pyx_v_nprocesses);
  __Pyx_XDECREF(__pyx_v_queue_size);
  __Pyx_XDECREF(__pyx_v_sampler);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2045:                                       generator=None, intervention_fun=None, tangent=False, verbose=False, nprocesses=0,
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)Py_False);
    values[9] = ((PyObject *)Py_False);
    values[10] = ((PyObject *)__pyx_int_0);
+2046:                                       queue_size=None, maxiter=None, maxcall=None, dlogz=None, n_effective=None, add_live=True,
    values[11] = ((PyObject *)Py_None);
    values[12] = ((PyObject *)Py_None);
    values[13] = ((PyObject *)Py_None);
    values[14] = ((PyObject *)Py_None);
    values[15] = ((PyObject *)Py_None);
    values[16] = ((PyObject *)Py_True);
+2047:                                       sampler=None, **dynesty_args):
    values[17] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_nested_sampling", 0, 5, 18, 1); __PYX_ERR(0, 2044, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_nested_sampling", 0, 5, 18, 2); __PYX_ERR(0, 2044, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_nested_sampling", 0, 5, 18, 3); __PYX_ERR(0, 2044, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_nested_sampling", 0, 5, 18, 4); __PYX_ERR(0, 2044, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_verbose);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nprocesses);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_queue_size);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxiter);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxcall);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dlogz);
          if (value) { values[14] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 15:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n_effective);
          if (value) { values[15] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 16:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_add_live);
          if (value) { values[16] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 17:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sampler);
          if (value) { values[17] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_dynesty_args, values, pos_args, "latent_infer_nested_sampling") < 0)) __PYX_ERR(0, 2044, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obs = ((PyArrayObject *)values[0]);
    __pyx_v_fltr = ((PyArrayObject *)values[1]);
    __pyx_v_Tf = values[2];
    __pyx_v_param_priors = values[3];
    __pyx_v_init_priors = values[4];
    __pyx_v_contactMatrix = values[5];
    __pyx_v_generator = values[6];
    __pyx_v_intervention_fun = values[7];
    __pyx_v_tangent = values[8];
    __pyx_v_verbose = values[9];
    __pyx_v_nprocesses = values[10];
    __pyx_v_queue_size = values[11];
    __pyx_v_maxiter = values[12];
    __pyx_v_maxcall = values[13];
    __pyx_v_dlogz = values[14];
    __pyx_v_n_effective = values[15];
    __pyx_v_add_live = values[16];
    __pyx_v_sampler = values[17];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("latent_infer_nested_sampling", 0, 5, 18, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2044, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_dynesty_args); __pyx_v_dynesty_args = 0;
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_infer_nested_sampling", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obs), __pyx_ptype_5numpy_ndarray, 1, "obs", 0))) __PYX_ERR(0, 2044, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fltr), __pyx_ptype_5numpy_ndarray, 1, "fltr", 0))) __PYX_ERR(0, 2044, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_74latent_infer_nested_sampling(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_param_priors, __pyx_v_init_priors, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_verbose, __pyx_v_nprocesses, __pyx_v_queue_size, __pyx_v_maxiter, __pyx_v_maxcall, __pyx_v_dlogz, __pyx_v_n_effective, __pyx_v_add_live, __pyx_v_sampler, __pyx_v_dynesty_args);
 2048:         """
 2049:         Compute the log-evidence and weighted samples for the initial conditions and all desired parameters, including control parameters,
 2050:         for a SIR type model with partially observed classes. This function uses nested sampling as implemented in the `dynesty` Python package.
 2051: 
 2052:         Parameters
 2053:         ----------
 2054:         obs: 2d numpy.array
 2055:             The observed trajectories with reduced number of variables
 2056:             (number of data points, (age groups * observed model classes))
 2057:         fltr: 2d numpy.array
 2058:             A matrix of shape (no. observed variables, no. total variables),
 2059:             such that obs_{ti} = fltr_{ij} * X_{tj}
 2060:         Tf: float
 2061:             Total time of the trajectory
 2062:         contactMatrix: callable
 2063:             A function that returns the contact matrix at time t (input).
 2064:         param_priors: dict
 2065:             A dictionary for priors for the model parameters.
 2066:             See `latent_infer` for further explanations.
 2067:         init_priors: dict
 2068:             A dictionary for priors for the initial conditions.
 2069:             See `latent_infer` for further explanations.
 2070:         contactMatrix: callable, optional
 2071:             A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.
 2072:             Either a contactMatrix or a generator must be specified.
 2073:         generator: pyross.contactMatrix, optional
 2074:             A pyross.contactMatrix object that generates a contact matrix function with specified lockdown
 2075:             parameters.
 2076:             Either a contactMatrix or a generator must be specified.
 2077:         intervention_fun: callable, optional
 2078:             The calling signature is `intervention_func(t, **kwargs)`,
 2079:             where t is time and kwargs are other keyword arguments for the function.
 2080:             The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.
 2081:             The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.
 2082:             If not set, assume intervention that's constant in time.
 2083:             See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.
 2084:         tangent: bool, optional
 2085:             Set to True to do inference in tangent space (might be less robust but a lot faster). Default is False.
 2086:         verbose: bool, optional
 2087:             Set to True to see intermediate outputs from the nested sampling procedure.
 2088:         nprocesses: int, optional
 2089:             The number of processes used for parallel evaluation of the likelihood.
 2090:         queue_size: int, optional
 2091:             Size of internal queue of likelihood values, default is nprocesses if multiprocessing is used.
 2092:         maxiter: int, optional
 2093:             The maximum number of iterations. Default is no limit.
 2094:         maxcall:int, optional
 2095:             The maximum number of calls to the likelihood function. Default no limit.
 2096:         dlogz: float, optional
 2097:             The iteration terminates if the estimated contribution of the remaining prior volume to the total evidence
 2098:             falls below this threshold. Default value is `1e-3 * (nlive - 1) + 0.01` if `add_live==True`, 0.01 otherwise.
 2099:         n_effective: float, optional
 2100:             The iteration terminates if the number of effective posterior samples reaches this values. Default is no limit.
 2101:         add_live: bool, optional
 2102:             Determines whether to add the remaining set of live points to the set of samples. Default is True.
 2103:         sampler: dynesty.NestedSampler, optional
 2104:             Continue running an instance of a nested sampler until the termination criteria are met.
 2105:         **dynesty_args:
 2106:             Arguments passed through to the construction of the dynesty.NestedSampler constructor. Relevant entries
 2107:             are (this is not comprehensive, for details see the documentation of dynesty):
 2108: 
 2109:             nlive: int, optional
 2110:                 The number of live points. Default is 500.
 2111:             bound: {'none', 'single', 'multi', 'balls', 'cubes'}, optional
 2112:                 Method used to approximately bound the prior using the current set of live points. Default is 'multi'.
 2113:             sample:  {'auto', 'unif', 'rwalk', 'rstagger', 'slice', 'rslice', 'hslice', callable}, optional
 2114:                 Method used to sample uniformly within the likelihood constraint, conditioned on the provided bounds.
 2115: 
 2116:         Returns
 2117:         -------
 2118:         sampler: dynesty.NestedSampler
 2119:             The state of the sampler after termination of the nested sampling run.
 2120:         """
 2121: 
+2122:         if dynesty is None:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_dynesty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 == Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+2123:             raise Exception("Nested sampling needs optional dependency `dynesty` which was not found.")
    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2123, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 2123, __pyx_L1_error)
 2124: 
+2125:         if nprocesses == 0:
  __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_nprocesses, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2125, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2125, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {
/* … */
  }
+2126:             if pathos_mp:
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pathos_mp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2126, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2126, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L5;
    }
 2127:                 # Optional dependecy for multiprocessing (pathos) is installed.
+2128:                 nprocesses = pathos_mp.cpu_count()
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pathos_mp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2128, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_cpu_count); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2128, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2128, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF_SET(__pyx_v_nprocesses, __pyx_t_1);
      __pyx_t_1 = 0;
 2129:             else:
+2130:                 nprocesses = 1
    /*else*/ {
      __Pyx_INCREF(__pyx_int_1);
      __Pyx_DECREF_SET(__pyx_v_nprocesses, __pyx_int_1);
    }
    __pyx_L5:;
 2131: 
+2132:         if queue_size is None:
  __pyx_t_3 = (__pyx_v_queue_size == Py_None);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
/* … */
  }
+2133:             queue_size = nprocesses
    __Pyx_INCREF(__pyx_v_nprocesses);
    __Pyx_DECREF_SET(__pyx_v_queue_size, __pyx_v_nprocesses);
 2134: 
 2135:         # Sanity checks of the inputs
+2136:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2136, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2136, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2136, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_v_intervention_fun);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2136, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2137: 
 2138:         # Process fltr and obs
+2139:         fltr, obs, obs0 = pyross.utils.process_latent_data(fltr, obs)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyross); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_utils); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_process_latent_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_7, ((PyObject *)__pyx_v_fltr), ((PyObject *)__pyx_v_obs)};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2139, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_7, ((PyObject *)__pyx_v_fltr), ((PyObject *)__pyx_v_obs)};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2139, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2139, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_7) {
      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_7); __pyx_t_7 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_v_fltr));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_fltr));
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_6, ((PyObject *)__pyx_v_fltr));
    __Pyx_INCREF(((PyObject *)__pyx_v_obs));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_obs));
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_6, ((PyObject *)__pyx_v_obs));
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2139, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2139, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_7 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_7 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_7);
    #else
    __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2139, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2139, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2139, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_8 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2139, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext;
    index = 0; __pyx_t_5 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_5)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    index = 1; __pyx_t_4 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_4)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    index = 2; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_7);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 3) < 0) __PYX_ERR(0, 2139, __pyx_L1_error)
    __pyx_t_9 = NULL;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L8_unpacking_done;
    __pyx_L7_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_9 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2139, __pyx_L1_error)
    __pyx_L8_unpacking_done:;
  }
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 2139, __pyx_L1_error)
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 2139, __pyx_L1_error)
  __Pyx_DECREF_SET(__pyx_v_fltr, ((PyArrayObject *)__pyx_t_5));
  __pyx_t_5 = 0;
  __Pyx_DECREF_SET(__pyx_v_obs, ((PyArrayObject *)__pyx_t_4));
  __pyx_t_4 = 0;
  __pyx_v_obs0 = __pyx_t_7;
  __pyx_t_7 = 0;
 2140: 
 2141:         # Read in parameter priors
+2142:         param_prior_names, keys, param_guess, param_stds, _, _, param_bounds, param_guess_range, \
  __pyx_v_param_prior_names = __pyx_t_7;
  __pyx_t_7 = 0;
  __pyx_v_keys = __pyx_t_4;
  __pyx_t_4 = 0;
  __pyx_v_param_guess = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_param_stds = __pyx_t_8;
  __pyx_t_8 = 0;
  __pyx_v__ = __pyx_t_10;
  __pyx_t_10 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_11);
  __pyx_t_11 = 0;
  __pyx_v_param_bounds = __pyx_t_12;
  __pyx_t_12 = 0;
  __pyx_v_param_guess_range = __pyx_t_13;
  __pyx_t_13 = 0;
  __pyx_v_is_scale_parameter = __pyx_t_14;
  __pyx_t_14 = 0;
  __pyx_v_scaled_param_guesses = __pyx_t_15;
  __pyx_t_15 = 0;
 2143:         is_scale_parameter, scaled_param_guesses \
+2144:             = pyross.utils.parse_param_prior_dict(param_priors, self.M, check_length=(not self.param_mapping_enabled))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyross); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_utils); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_parse_param_prior_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_self->M); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_v_param_priors);
  __Pyx_GIVEREF(__pyx_v_param_priors);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_param_priors);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_7);
  __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = __Pyx_PyBool_FromLong((!(__pyx_v_self->param_mapping_enabled != 0))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_check_length, __pyx_t_5) < 0) __PYX_ERR(0, 2144, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
    PyObject* sequence = __pyx_t_5;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 10)) {
      if (size > 10) __Pyx_RaiseTooManyValuesError(10);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2142, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_10 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 5); 
      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 6); 
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 7); 
      __pyx_t_14 = PyTuple_GET_ITEM(sequence, 8); 
      __pyx_t_15 = PyTuple_GET_ITEM(sequence, 9); 
    } else {
      __pyx_t_7 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_10 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 5); 
      __pyx_t_12 = PyList_GET_ITEM(sequence, 6); 
      __pyx_t_13 = PyList_GET_ITEM(sequence, 7); 
      __pyx_t_14 = PyList_GET_ITEM(sequence, 8); 
      __pyx_t_15 = PyList_GET_ITEM(sequence, 9); 
    }
    __Pyx_INCREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_t_12);
    __Pyx_INCREF(__pyx_t_13);
    __Pyx_INCREF(__pyx_t_14);
    __Pyx_INCREF(__pyx_t_15);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[10] = {&__pyx_t_7,&__pyx_t_4,&__pyx_t_1,&__pyx_t_8,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12,&__pyx_t_13,&__pyx_t_14,&__pyx_t_15};
      for (i=0; i < 10; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 2142, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[10] = {&__pyx_t_7,&__pyx_t_4,&__pyx_t_1,&__pyx_t_8,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12,&__pyx_t_13,&__pyx_t_14,&__pyx_t_15};
    __pyx_t_16 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2142, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_9 = Py_TYPE(__pyx_t_16)->tp_iternext;
    for (index=0; index < 10; index++) {
      PyObject* item = __pyx_t_9(__pyx_t_16); if (unlikely(!item)) goto __pyx_L9_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_16), 10) < 0) __PYX_ERR(0, 2142, __pyx_L1_error)
    __pyx_t_9 = NULL;
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    goto __pyx_L10_unpacking_done;
    __pyx_L9_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    __pyx_t_9 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2142, __pyx_L1_error)
    __pyx_L10_unpacking_done:;
  }
 2145: 
 2146:         # Read in initial conditions priors
+2147:         init_prior_names, init_guess, init_stds, _, _,init_bounds, init_flags, init_fltrs \
  __pyx_v_init_prior_names = __pyx_t_15;
  __pyx_t_15 = 0;
  __pyx_v_init_guess = __pyx_t_11;
  __pyx_t_11 = 0;
  __pyx_v_init_stds = __pyx_t_13;
  __pyx_t_13 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_14);
  __pyx_t_14 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_12);
  __pyx_t_12 = 0;
  __pyx_v_init_bounds = __pyx_t_10;
  __pyx_t_10 = 0;
  __pyx_v_init_flags = __pyx_t_8;
  __pyx_t_8 = 0;
  __pyx_v_init_fltrs = __pyx_t_1;
  __pyx_t_1 = 0;
+2148:             = pyross.utils.parse_init_prior_dict(init_priors, self.dim, len(obs0))
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_pyross); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_utils); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_parse_init_prior_dict); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_17 = PyObject_Length(__pyx_v_obs0); if (unlikely(__pyx_t_17 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2148, __pyx_L1_error)
  __pyx_t_13 = PyInt_FromSsize_t(__pyx_t_17); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_12 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_15))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_15);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_15, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_15)) {
    PyObject *__pyx_temp[4] = {__pyx_t_12, __pyx_v_init_priors, __pyx_t_14, __pyx_t_13};
    __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2148, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) {
    PyObject *__pyx_temp[4] = {__pyx_t_12, __pyx_v_init_priors, __pyx_t_14, __pyx_t_13};
    __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2148, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  } else
  #endif
  {
    __pyx_t_11 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2148, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (__pyx_t_12) {
      __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_12); __pyx_t_12 = NULL;
    }
    __Pyx_INCREF(__pyx_v_init_priors);
    __Pyx_GIVEREF(__pyx_v_init_priors);
    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_6, __pyx_v_init_priors);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_6, __pyx_t_14);
    __Pyx_GIVEREF(__pyx_t_13);
    PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_6, __pyx_t_13);
    __pyx_t_14 = 0;
    __pyx_t_13 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_11, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2148, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  }
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
    PyObject* sequence = __pyx_t_5;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 8)) {
      if (size > 8) __Pyx_RaiseTooManyValuesError(8);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2147, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_15 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_14 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_10 = PyTuple_GET_ITEM(sequence, 5); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 6); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 7); 
    } else {
      __pyx_t_15 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_13 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_14 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_12 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_10 = PyList_GET_ITEM(sequence, 5); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 6); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 7); 
    }
    __Pyx_INCREF(__pyx_t_15);
    __Pyx_INCREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_t_13);
    __Pyx_INCREF(__pyx_t_14);
    __Pyx_INCREF(__pyx_t_12);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_1);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[8] = {&__pyx_t_15,&__pyx_t_11,&__pyx_t_13,&__pyx_t_14,&__pyx_t_12,&__pyx_t_10,&__pyx_t_8,&__pyx_t_1};
      for (i=0; i < 8; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 2147, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[8] = {&__pyx_t_15,&__pyx_t_11,&__pyx_t_13,&__pyx_t_14,&__pyx_t_12,&__pyx_t_10,&__pyx_t_8,&__pyx_t_1};
    __pyx_t_4 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2147, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_9 = Py_TYPE(__pyx_t_4)->tp_iternext;
    for (index=0; index < 8; index++) {
      PyObject* item = __pyx_t_9(__pyx_t_4); if (unlikely(!item)) goto __pyx_L11_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_4), 8) < 0) __PYX_ERR(0, 2147, __pyx_L1_error)
    __pyx_t_9 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L12_unpacking_done;
    __pyx_L11_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_9 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2147, __pyx_L1_error)
    __pyx_L12_unpacking_done:;
  }
 2149: 
 2150:         # Concatenate the flattend parameter guess with init guess
+2151:         param_length = param_guess.shape[0]
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_param_guess, __pyx_n_s_shape); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_5, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_param_length = __pyx_t_1;
  __pyx_t_1 = 0;
+2152:         guess = np.concatenate([param_guess, init_guess]).astype(DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyList_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_INCREF(__pyx_v_param_guess);
  __Pyx_GIVEREF(__pyx_v_param_guess);
  PyList_SET_ITEM(__pyx_t_8, 0, __pyx_v_param_guess);
  __Pyx_INCREF(__pyx_v_init_guess);
  __Pyx_GIVEREF(__pyx_v_init_guess);
  PyList_SET_ITEM(__pyx_t_8, 1, __pyx_v_init_guess);
  __pyx_t_12 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
    }
  }
  __pyx_t_5 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_12, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_8);
  __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_astype); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_8 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
    }
  }
  __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_8, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_v_guess = __pyx_t_1;
  __pyx_t_1 = 0;
+2153:         stds = np.concatenate([param_stds,init_stds]).astype(DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_param_stds);
  __Pyx_GIVEREF(__pyx_v_param_stds);
  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_v_param_stds);
  __Pyx_INCREF(__pyx_v_init_stds);
  __Pyx_GIVEREF(__pyx_v_init_stds);
  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_v_init_stds);
  __pyx_t_12 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  __pyx_t_10 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_12, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_astype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_5, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_10);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_stds = __pyx_t_1;
  __pyx_t_1 = 0;
+2154:         bounds = np.concatenate([param_bounds, init_bounds], axis=0).astype(DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyList_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_INCREF(__pyx_v_param_bounds);
  __Pyx_GIVEREF(__pyx_v_param_bounds);
  PyList_SET_ITEM(__pyx_t_8, 0, __pyx_v_param_bounds);
  __Pyx_INCREF(__pyx_v_init_bounds);
  __Pyx_GIVEREF(__pyx_v_init_bounds);
  PyList_SET_ITEM(__pyx_t_8, 1, __pyx_v_init_bounds);
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_8);
  __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 2154, __pyx_L1_error)
  __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_5, __pyx_t_8); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_astype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_5, __pyx_t_12) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_12);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_bounds = __pyx_t_1;
  __pyx_t_1 = 0;
 2155: 
+2156:         prior = Prior(param_prior_names+init_prior_names, bounds, guess, stds)
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_Prior); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_12 = PyNumber_Add(__pyx_v_param_prior_names, __pyx_v_init_prior_names); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[5] = {__pyx_t_5, __pyx_t_12, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_6, 4+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2156, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[5] = {__pyx_t_5, __pyx_t_12, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_6, 4+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2156, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  } else
  #endif
  {
    __pyx_t_10 = PyTuple_New(4+__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_6, __pyx_t_12);
    __Pyx_INCREF(__pyx_v_bounds);
    __Pyx_GIVEREF(__pyx_v_bounds);
    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_6, __pyx_v_bounds);
    __Pyx_INCREF(__pyx_v_guess);
    __Pyx_GIVEREF(__pyx_v_guess);
    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_6, __pyx_v_guess);
    __Pyx_INCREF(__pyx_v_stds);
    __Pyx_GIVEREF(__pyx_v_stds);
    PyTuple_SET_ITEM(__pyx_t_10, 3+__pyx_t_6, __pyx_v_stds);
    __pyx_t_12 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_prior = __pyx_t_1;
  __pyx_t_1 = 0;
 2157: 
+2158:         ndim = len(guess)
  __pyx_t_17 = PyObject_Length(__pyx_v_guess); if (unlikely(__pyx_t_17 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2158, __pyx_L1_error)
  __pyx_v_ndim = __pyx_t_17;
 2159: 
+2160:         prior_transform_args = {'prior':prior}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_prior, __pyx_v_prior) < 0) __PYX_ERR(0, 2160, __pyx_L1_error)
  __pyx_v_prior_transform_args = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+2161:         loglike_args = {'generator':generator, 'intervention_fun':intervention_fun, 'param_keys':keys,
  __pyx_t_1 = __Pyx_PyDict_NewPresized(15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2161, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_generator, __pyx_v_generator) < 0) __PYX_ERR(0, 2161, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_intervention_fun, __pyx_v_intervention_fun) < 0) __PYX_ERR(0, 2161, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_param_keys, __pyx_v_keys) < 0) __PYX_ERR(0, 2161, __pyx_L1_error)
+2162:                         'param_guess_range':param_guess_range, 'is_scale_parameter':is_scale_parameter,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_param_guess_range, __pyx_v_param_guess_range) < 0) __PYX_ERR(0, 2161, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_is_scale_parameter, __pyx_v_is_scale_parameter) < 0) __PYX_ERR(0, 2161, __pyx_L1_error)
+2163:                         'scaled_param_guesses':scaled_param_guesses, 'param_length':param_length, 'obs':obs,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_scaled_param_guesses, __pyx_v_scaled_param_guesses) < 0) __PYX_ERR(0, 2161, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_param_length, __pyx_v_param_length) < 0) __PYX_ERR(0, 2161, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_obs, ((PyObject *)__pyx_v_obs)) < 0) __PYX_ERR(0, 2161, __pyx_L1_error)
+2164:                         'fltr':fltr, 'Tf':Tf, 'obs0':obs0, 'init_flags':init_flags, 'init_fltrs': init_fltrs,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_fltr, ((PyObject *)__pyx_v_fltr)) < 0) __PYX_ERR(0, 2161, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_Tf, __pyx_v_Tf) < 0) __PYX_ERR(0, 2161, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_obs0, __pyx_v_obs0) < 0) __PYX_ERR(0, 2161, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_init_flags, __pyx_v_init_flags) < 0) __PYX_ERR(0, 2161, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_init_fltrs, __pyx_v_init_fltrs) < 0) __PYX_ERR(0, 2161, __pyx_L1_error)
+2165:                         'tangent':tangent, 'bounds':bounds}
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_tangent, __pyx_v_tangent) < 0) __PYX_ERR(0, 2161, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_bounds, __pyx_v_bounds) < 0) __PYX_ERR(0, 2161, __pyx_L1_error)
  __pyx_v_loglike_args = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 2166: 
+2167:         if sampler is None:
  __pyx_t_2 = (__pyx_v_sampler == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L13;
  }
+2168:             if nprocesses > 1:
    __pyx_t_1 = PyObject_RichCompare(__pyx_v_nprocesses, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2168, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2168, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L14;
    }
+2169:                 pool = pathos_mp.ProcessingPool(nprocesses)
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_pathos_mp); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2169, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_ProcessingPool); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2169, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_10);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_10, function);
        }
      }
      __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_8, __pyx_v_nprocesses) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_nprocesses);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2169, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_v_pool = __pyx_t_1;
      __pyx_t_1 = 0;
+2170:                 sampler = dynesty.NestedSampler(self._loglikelihood_latent, self._nested_sampling_prior_transform, ndim=ndim,
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_dynesty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2170, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_NestedSampler); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2170, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_loglikelihood_latent); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2170, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_nested_sampling_prior_transform); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2170, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2170, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_8);
      __pyx_t_1 = 0;
      __pyx_t_8 = 0;
      __pyx_t_1 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2170, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_ndim); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2170, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_ndim, __pyx_t_5) < 0) __PYX_ERR(0, 2170, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_12, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2170, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF_SET(__pyx_v_sampler, __pyx_t_1);
      __pyx_t_1 = 0;
+2171:                                                 logl_kwargs=loglike_args, ptform_kwargs=prior_transform_args,
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_logl_kwargs, __pyx_v_loglike_args) < 0) __PYX_ERR(0, 2170, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_ptform_kwargs, __pyx_v_prior_transform_args) < 0) __PYX_ERR(0, 2170, __pyx_L1_error)
+2172:                                                 pool=pool, queue_size=queue_size, **dynesty_args)
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_pool, __pyx_v_pool) < 0) __PYX_ERR(0, 2170, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_queue_size, __pyx_v_queue_size) < 0) __PYX_ERR(0, 2170, __pyx_L1_error)
      __pyx_t_8 = __pyx_t_1;
      __pyx_t_1 = 0;
      if (__Pyx_MergeKeywords(__pyx_t_8, __pyx_v_dynesty_args) < 0) __PYX_ERR(0, 2172, __pyx_L1_error)
 2173:             else:
+2174:                 sampler = dynesty.NestedSampler(self._loglikelihood_latent, self._nested_sampling_prior_transform, ndim=ndim,
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_dynesty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2174, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_NestedSampler); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2174, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_loglikelihood_latent); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2174, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_nested_sampling_prior_transform); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2174, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2174, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_12);
      PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_12);
      __pyx_t_1 = 0;
      __pyx_t_12 = 0;
      __pyx_t_1 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2174, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_ndim); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2174, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_ndim, __pyx_t_5) < 0) __PYX_ERR(0, 2174, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, __pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2174, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF_SET(__pyx_v_sampler, __pyx_t_1);
      __pyx_t_1 = 0;
    }
    __pyx_L14:;
+2175:                                                 logl_kwargs=loglike_args, ptform_kwargs=prior_transform_args,
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_logl_kwargs, __pyx_v_loglike_args) < 0) __PYX_ERR(0, 2174, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_ptform_kwargs, __pyx_v_prior_transform_args) < 0) __PYX_ERR(0, 2174, __pyx_L1_error)
      __pyx_t_12 = __pyx_t_1;
      __pyx_t_1 = 0;
+2176:                                                 **dynesty_args)
      if (__Pyx_MergeKeywords(__pyx_t_12, __pyx_v_dynesty_args) < 0) __PYX_ERR(0, 2176, __pyx_L1_error)
 2177:         else:
+2178:             if nprocesses > 1:
  /*else*/ {
    __pyx_t_1 = PyObject_RichCompare(__pyx_v_nprocesses, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2178, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2178, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L15;
    }
 2179:                 # Restart the pool we closed at the end of the previous run.
+2180:                 sampler.pool = pathos_mp.ProcessingPool(nprocesses)
      __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_pathos_mp); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2180, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_ProcessingPool); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2180, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_12 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
        __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_10);
        if (likely(__pyx_t_12)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
          __Pyx_INCREF(__pyx_t_12);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_10, function);
        }
      }
      __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_12, __pyx_v_nprocesses) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_nprocesses);
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2180, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_sampler, __pyx_n_s_pool, __pyx_t_1) < 0) __PYX_ERR(0, 2180, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2181:                 sampler.M = sampler.pool.map
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2181, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_map); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2181, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_sampler, __pyx_n_s_M, __pyx_t_10) < 0) __PYX_ERR(0, 2181, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+2182:             elif sampler.pool is not None:
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2182, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_3 = (__pyx_t_10 != Py_None);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_2 = (__pyx_t_3 != 0);
    if (__pyx_t_2) {
/* … */
    }
    __pyx_L15:;
  }
  __pyx_L13:;
+2183:                 sampler.pool = None
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_sampler, __pyx_n_s_pool, Py_None) < 0) __PYX_ERR(0, 2183, __pyx_L1_error)
+2184:                 sampler.M = map
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_sampler, __pyx_n_s_M, __pyx_builtin_map) < 0) __PYX_ERR(0, 2184, __pyx_L1_error)
 2185: 
+2186:         sampler.run_nested(maxiter=maxiter, maxcall=maxcall, dlogz=dlogz, n_effective=n_effective,
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_run_nested); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_maxiter, __pyx_v_maxiter) < 0) __PYX_ERR(0, 2186, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_maxcall, __pyx_v_maxcall) < 0) __PYX_ERR(0, 2186, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dlogz, __pyx_v_dlogz) < 0) __PYX_ERR(0, 2186, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_n_effective, __pyx_v_n_effective) < 0) __PYX_ERR(0, 2186, __pyx_L1_error)
/* … */
  __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+2187:                            add_live=add_live, print_progress=verbose)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_add_live, __pyx_v_add_live) < 0) __PYX_ERR(0, 2186, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_print_progress, __pyx_v_verbose) < 0) __PYX_ERR(0, 2186, __pyx_L1_error)
 2188: 
+2189:         if sampler.pool is not None:
  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_2 = (__pyx_t_12 != Py_None);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+2190:             sampler.pool.close()
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2190, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_close); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2190, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_12 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2190, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+2191:             sampler.pool.join()
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2191, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_join); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2191, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_12 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2191, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+2192:             sampler.pool.clear()
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2192, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_clear); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2192, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_12 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2192, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 2193: 
+2194:         return sampler
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_sampler);
  __pyx_r = __pyx_v_sampler;
  goto __pyx_L0;
 2195: 
+2196:     def latent_infer_nested_sampling_process_result(self, sampler, obs, fltr, param_priors, init_priors, contactMatrix=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_77latent_infer_nested_sampling_process_result(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_76latent_infer_nested_sampling_process_result[] = "\n        Take the sampler generated by `pyross.inference.latent_infer_nested_sampling` and produce output dictionaries for\n        further use in the pyross framework. See there for additional description of parameters.\n\n        Parameters\n        ----------\n        sampler: dynesty.NestedSampler\n            Output of `pyross.inference.latent_infer_nested_sampling`.\n        obs: 2d numpy.array\n        fltr: 2d numpy.array\n        param_priors: dict\n        init_priors: dict\n        contactMatrix: callable, optional\n        generator: pyross.contactMatrix, optional\n        intervention_fun: callable, optional\n        **catchall_kwargs: dict\n            Catches further provided arguments and ignores them.\n\n        Returns\n        -------\n        result: dynesty.Result\n            The result of the nested sampling iteration. Relevant entries include:\n\n            result.logz: list\n                The progression of log-evidence estimates, use result.logz[-1] for the final estimate.\n        output_samples: list\n            The processed weighted posterior samples.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_77latent_infer_nested_sampling_process_result(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sampler = 0;
  PyObject *__pyx_v_obs = 0;
  PyObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_param_priors = 0;
  PyObject *__pyx_v_init_priors = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  CYTHON_UNUSED PyObject *__pyx_v_catchall_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_infer_nested_sampling_process_result (wrapper)", 0);
  __pyx_v_catchall_kwargs = PyDict_New(); if (unlikely(!__pyx_v_catchall_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_catchall_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sampler,&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_param_priors,&__pyx_n_s_init_priors,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
    values[5] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_XDECREF(__pyx_v_catchall_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_76latent_infer_nested_sampling_process_result(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_sampler, PyObject *__pyx_v_obs, PyObject *__pyx_v_fltr, PyObject *__pyx_v_param_priors, PyObject *__pyx_v_init_priors, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, CYTHON_UNUSED PyObject *__pyx_v_catchall_kwargs) {
  PyObject *__pyx_v_obs0 = NULL;
  PyObject *__pyx_v_param_prior_names = NULL;
  PyObject *__pyx_v_keys = NULL;
  PyObject *__pyx_v_param_guess = NULL;
  PyObject *__pyx_v_param_stds = NULL;
  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
  PyObject *__pyx_v_param_bounds = NULL;
  PyObject *__pyx_v_param_guess_range = NULL;
  PyObject *__pyx_v_is_scale_parameter = NULL;
  PyObject *__pyx_v_scaled_param_guesses = NULL;
  PyObject *__pyx_v_init_prior_names = NULL;
  PyObject *__pyx_v_init_guess = NULL;
  PyObject *__pyx_v_init_stds = NULL;
  PyObject *__pyx_v_init_bounds = NULL;
  PyObject *__pyx_v_init_flags = NULL;
  PyObject *__pyx_v_init_fltrs = NULL;
  PyObject *__pyx_v_param_length = NULL;
  PyObject *__pyx_v_guess = NULL;
  PyObject *__pyx_v_stds = NULL;
  PyObject *__pyx_v_bounds = NULL;
  PyObject *__pyx_v_prior = NULL;
  PyObject *__pyx_v_result = NULL;
  PyObject *__pyx_v_output_samples = NULL;
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_v_sample = NULL;
  PyObject *__pyx_v_weight = NULL;
  PyObject *__pyx_v_l_like = NULL;
  PyObject *__pyx_v_param_sample = NULL;
  PyObject *__pyx_v_orig_params = NULL;
  PyObject *__pyx_v_init_sample = NULL;
  PyObject *__pyx_v_sample_params_dict = NULL;
  PyObject *__pyx_v_sample_control_params_dict = NULL;
  PyObject *__pyx_v_sample_x0 = NULL;
  PyObject *__pyx_v_l_prior = NULL;
  PyObject *__pyx_v_l_post = NULL;
  PyObject *__pyx_v_output_dict = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_infer_nested_sampling_process_result", 0);
  __Pyx_INCREF(__pyx_v_obs);
  __Pyx_INCREF(__pyx_v_fltr);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_infer_nested_sampling_process_result", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_obs0);
  __Pyx_XDECREF(__pyx_v_param_prior_names);
  __Pyx_XDECREF(__pyx_v_keys);
  __Pyx_XDECREF(__pyx_v_param_guess);
  __Pyx_XDECREF(__pyx_v_param_stds);
  __Pyx_XDECREF(__pyx_v__);
  __Pyx_XDECREF(__pyx_v_param_bounds);
  __Pyx_XDECREF(__pyx_v_param_guess_range);
  __Pyx_XDECREF(__pyx_v_is_scale_parameter);
  __Pyx_XDECREF(__pyx_v_scaled_param_guesses);
  __Pyx_XDECREF(__pyx_v_init_prior_names);
  __Pyx_XDECREF(__pyx_v_init_guess);
  __Pyx_XDECREF(__pyx_v_init_stds);
  __Pyx_XDECREF(__pyx_v_init_bounds);
  __Pyx_XDECREF(__pyx_v_init_flags);
  __Pyx_XDECREF(__pyx_v_init_fltrs);
  __Pyx_XDECREF(__pyx_v_param_length);
  __Pyx_XDECREF(__pyx_v_guess);
  __Pyx_XDECREF(__pyx_v_stds);
  __Pyx_XDECREF(__pyx_v_bounds);
  __Pyx_XDECREF(__pyx_v_prior);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XDECREF(__pyx_v_output_samples);
  __Pyx_XDECREF(__pyx_v_sample);
  __Pyx_XDECREF(__pyx_v_weight);
  __Pyx_XDECREF(__pyx_v_l_like);
  __Pyx_XDECREF(__pyx_v_param_sample);
  __Pyx_XDECREF(__pyx_v_orig_params);
  __Pyx_XDECREF(__pyx_v_init_sample);
  __Pyx_XDECREF(__pyx_v_sample_params_dict);
  __Pyx_XDECREF(__pyx_v_sample_control_params_dict);
  __Pyx_XDECREF(__pyx_v_sample_x0);
  __Pyx_XDECREF(__pyx_v_l_prior);
  __Pyx_XDECREF(__pyx_v_l_post);
  __Pyx_XDECREF(__pyx_v_output_dict);
  __Pyx_XDECREF(__pyx_v_obs);
  __Pyx_XDECREF(__pyx_v_fltr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2197:                                                      generator=None, intervention_fun=None, **catchall_kwargs):
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sampler)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_nested_sampling_process_result", 0, 5, 8, 1); __PYX_ERR(0, 2196, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_nested_sampling_process_result", 0, 5, 8, 2); __PYX_ERR(0, 2196, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_nested_sampling_process_result", 0, 5, 8, 3); __PYX_ERR(0, 2196, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_nested_sampling_process_result", 0, 5, 8, 4); __PYX_ERR(0, 2196, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[7] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_catchall_kwargs, values, pos_args, "latent_infer_nested_sampling_process_result") < 0)) __PYX_ERR(0, 2196, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sampler = values[0];
    __pyx_v_obs = values[1];
    __pyx_v_fltr = values[2];
    __pyx_v_param_priors = values[3];
    __pyx_v_init_priors = values[4];
    __pyx_v_contactMatrix = values[5];
    __pyx_v_generator = values[6];
    __pyx_v_intervention_fun = values[7];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("latent_infer_nested_sampling_process_result", 0, 5, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2196, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_catchall_kwargs); __pyx_v_catchall_kwargs = 0;
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_infer_nested_sampling_process_result", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_76latent_infer_nested_sampling_process_result(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_sampler, __pyx_v_obs, __pyx_v_fltr, __pyx_v_param_priors, __pyx_v_init_priors, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_catchall_kwargs);
 2198:         """
 2199:         Take the sampler generated by `pyross.inference.latent_infer_nested_sampling` and produce output dictionaries for
 2200:         further use in the pyross framework. See there for additional description of parameters.
 2201: 
 2202:         Parameters
 2203:         ----------
 2204:         sampler: dynesty.NestedSampler
 2205:             Output of `pyross.inference.latent_infer_nested_sampling`.
 2206:         obs: 2d numpy.array
 2207:         fltr: 2d numpy.array
 2208:         param_priors: dict
 2209:         init_priors: dict
 2210:         contactMatrix: callable, optional
 2211:         generator: pyross.contactMatrix, optional
 2212:         intervention_fun: callable, optional
 2213:         **catchall_kwargs: dict
 2214:             Catches further provided arguments and ignores them.
 2215: 
 2216:         Returns
 2217:         -------
 2218:         result: dynesty.Result
 2219:             The result of the nested sampling iteration. Relevant entries include:
 2220: 
 2221:             result.logz: list
 2222:                 The progression of log-evidence estimates, use result.logz[-1] for the final estimate.
 2223:         output_samples: list
 2224:             The processed weighted posterior samples.
 2225:         """
 2226:         # Sanity checks of the inputs
+2227:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2227, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2227, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2227, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_intervention_fun);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2228: 
 2229:         # Process fltr and obs
+2230:         fltr, obs, obs0 = pyross.utils.process_latent_data(fltr, obs)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2230, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2230, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_process_latent_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2230, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_fltr, __pyx_v_obs};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2230, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_fltr, __pyx_v_obs};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2230, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_3 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_v_fltr);
    __Pyx_GIVEREF(__pyx_v_fltr);
    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_4, __pyx_v_fltr);
    __Pyx_INCREF(__pyx_v_obs);
    __Pyx_GIVEREF(__pyx_v_obs);
    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_4, __pyx_v_obs);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2230, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_5);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 2; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 3) < 0) __PYX_ERR(0, 2230, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2230, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __Pyx_DECREF_SET(__pyx_v_fltr, __pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_obs, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_v_obs0 = __pyx_t_5;
  __pyx_t_5 = 0;
 2231: 
 2232:         # Read in parameter priors
+2233:         param_prior_names, keys, param_guess, param_stds, _, _, param_bounds, param_guess_range, \
  __pyx_v_param_prior_names = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_keys = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_param_guess = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_param_stds = __pyx_t_6;
  __pyx_t_6 = 0;
  __pyx_v__ = __pyx_t_8;
  __pyx_t_8 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_9);
  __pyx_t_9 = 0;
  __pyx_v_param_bounds = __pyx_t_10;
  __pyx_t_10 = 0;
  __pyx_v_param_guess_range = __pyx_t_11;
  __pyx_t_11 = 0;
  __pyx_v_is_scale_parameter = __pyx_t_12;
  __pyx_t_12 = 0;
  __pyx_v_scaled_param_guesses = __pyx_t_13;
  __pyx_t_13 = 0;
 2234:         is_scale_parameter, scaled_param_guesses \
+2235:             = pyross.utils.parse_param_prior_dict(param_priors, self.M, check_length=(not self.param_mapping_enabled))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyross); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_parse_param_prior_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_self->M); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_param_priors);
  __Pyx_GIVEREF(__pyx_v_param_priors);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_param_priors);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyBool_FromLong((!(__pyx_v_self->param_mapping_enabled != 0))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_check_length, __pyx_t_2) < 0) __PYX_ERR(0, 2235, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 10)) {
      if (size > 10) __Pyx_RaiseTooManyValuesError(10);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2233, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 5); 
      __pyx_t_10 = PyTuple_GET_ITEM(sequence, 6); 
      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 7); 
      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 8); 
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 9); 
    } else {
      __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 5); 
      __pyx_t_10 = PyList_GET_ITEM(sequence, 6); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 7); 
      __pyx_t_12 = PyList_GET_ITEM(sequence, 8); 
      __pyx_t_13 = PyList_GET_ITEM(sequence, 9); 
    }
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_t_12);
    __Pyx_INCREF(__pyx_t_13);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[10] = {&__pyx_t_5,&__pyx_t_3,&__pyx_t_1,&__pyx_t_6,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12,&__pyx_t_13};
      for (i=0; i < 10; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 2233, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[10] = {&__pyx_t_5,&__pyx_t_3,&__pyx_t_1,&__pyx_t_6,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12,&__pyx_t_13};
    __pyx_t_14 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2233, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_14)->tp_iternext;
    for (index=0; index < 10; index++) {
      PyObject* item = __pyx_t_7(__pyx_t_14); if (unlikely(!item)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_14), 10) < 0) __PYX_ERR(0, 2233, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2233, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
 2236: 
 2237:         # Read in initial conditions priors
+2238:         init_prior_names, init_guess, init_stds, _, _,init_bounds, init_flags, init_fltrs \
  __pyx_v_init_prior_names = __pyx_t_13;
  __pyx_t_13 = 0;
  __pyx_v_init_guess = __pyx_t_9;
  __pyx_t_9 = 0;
  __pyx_v_init_stds = __pyx_t_11;
  __pyx_t_11 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_12);
  __pyx_t_12 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_10);
  __pyx_t_10 = 0;
  __pyx_v_init_bounds = __pyx_t_8;
  __pyx_t_8 = 0;
  __pyx_v_init_flags = __pyx_t_6;
  __pyx_t_6 = 0;
  __pyx_v_init_fltrs = __pyx_t_1;
  __pyx_t_1 = 0;
+2239:             = pyross.utils.parse_init_prior_dict(init_priors, self.dim, len(obs0))
  __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_pyross); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_utils); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_parse_init_prior_dict); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_15 = PyObject_Length(__pyx_v_obs0); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2239, __pyx_L1_error)
  __pyx_t_11 = PyInt_FromSsize_t(__pyx_t_15); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_10 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_13);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_13, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_13)) {
    PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_v_init_priors, __pyx_t_12, __pyx_t_11};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2239, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_13)) {
    PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_v_init_priors, __pyx_t_12, __pyx_t_11};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2239, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2239, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_10) {
      __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_10); __pyx_t_10 = NULL;
    }
    __Pyx_INCREF(__pyx_v_init_priors);
    __Pyx_GIVEREF(__pyx_v_init_priors);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_4, __pyx_v_init_priors);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_4, __pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_4, __pyx_t_11);
    __pyx_t_12 = 0;
    __pyx_t_11 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2239, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 8)) {
      if (size > 8) __Pyx_RaiseTooManyValuesError(8);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2238, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_10 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 5); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 6); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 7); 
    } else {
      __pyx_t_13 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_12 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_10 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 5); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 6); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 7); 
    }
    __Pyx_INCREF(__pyx_t_13);
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_t_12);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_1);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[8] = {&__pyx_t_13,&__pyx_t_9,&__pyx_t_11,&__pyx_t_12,&__pyx_t_10,&__pyx_t_8,&__pyx_t_6,&__pyx_t_1};
      for (i=0; i < 8; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 2238, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[8] = {&__pyx_t_13,&__pyx_t_9,&__pyx_t_11,&__pyx_t_12,&__pyx_t_10,&__pyx_t_8,&__pyx_t_6,&__pyx_t_1};
    __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2238, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext;
    for (index=0; index < 8; index++) {
      PyObject* item = __pyx_t_7(__pyx_t_3); if (unlikely(!item)) goto __pyx_L7_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_3), 8) < 0) __PYX_ERR(0, 2238, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_unpacking_done;
    __pyx_L7_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2238, __pyx_L1_error)
    __pyx_L8_unpacking_done:;
  }
 2240: 
 2241:         # Concatenate the flattend parameter guess with init guess
+2242:         param_length = param_guess.shape[0]
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_param_guess, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2242, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2242, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_param_length = __pyx_t_1;
  __pyx_t_1 = 0;
+2243:         guess = np.concatenate([param_guess, init_guess]).astype(DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2243, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2243, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2243, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_v_param_guess);
  __Pyx_GIVEREF(__pyx_v_param_guess);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_v_param_guess);
  __Pyx_INCREF(__pyx_v_init_guess);
  __Pyx_GIVEREF(__pyx_v_init_guess);
  PyList_SET_ITEM(__pyx_t_6, 1, __pyx_v_init_guess);
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  __pyx_t_2 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_10, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2243, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_astype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2243, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2243, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_6, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2243, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_guess = __pyx_t_1;
  __pyx_t_1 = 0;
+2244:         stds = np.concatenate([param_stds,init_stds]).astype(DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_param_stds);
  __Pyx_GIVEREF(__pyx_v_param_stds);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_v_param_stds);
  __Pyx_INCREF(__pyx_v_init_stds);
  __Pyx_GIVEREF(__pyx_v_init_stds);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_v_init_stds);
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_10, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_astype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_8);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_stds = __pyx_t_1;
  __pyx_t_1 = 0;
+2245:         bounds = np.concatenate([param_bounds, init_bounds], axis=0).astype(DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_v_param_bounds);
  __Pyx_GIVEREF(__pyx_v_param_bounds);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_v_param_bounds);
  __Pyx_INCREF(__pyx_v_init_bounds);
  __Pyx_GIVEREF(__pyx_v_init_bounds);
  PyList_SET_ITEM(__pyx_t_6, 1, __pyx_v_init_bounds);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 2245, __pyx_L1_error)
  __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_astype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_10);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_bounds = __pyx_t_1;
  __pyx_t_1 = 0;
 2246: 
+2247:         prior = Prior(param_prior_names+init_prior_names, bounds, guess, stds)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Prior); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_10 = PyNumber_Add(__pyx_v_param_prior_names, __pyx_v_init_prior_names); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[5] = {__pyx_t_2, __pyx_t_10, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2247, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[5] = {__pyx_t_2, __pyx_t_10, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2247, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2247, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_4, __pyx_t_10);
    __Pyx_INCREF(__pyx_v_bounds);
    __Pyx_GIVEREF(__pyx_v_bounds);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_4, __pyx_v_bounds);
    __Pyx_INCREF(__pyx_v_guess);
    __Pyx_GIVEREF(__pyx_v_guess);
    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_4, __pyx_v_guess);
    __Pyx_INCREF(__pyx_v_stds);
    __Pyx_GIVEREF(__pyx_v_stds);
    PyTuple_SET_ITEM(__pyx_t_8, 3+__pyx_t_4, __pyx_v_stds);
    __pyx_t_10 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2247, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_prior = __pyx_t_1;
  __pyx_t_1 = 0;
 2248: 
+2249:         result = sampler.results
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_results); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_result = __pyx_t_1;
  __pyx_t_1 = 0;
+2250:         output_samples = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2250, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_output_samples = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+2251:         for i in range(len(result.samples)):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_15 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2251, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_16 = __pyx_t_15;
  for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
    __pyx_v_i = __pyx_t_17;
+2252:             sample = result.samples[i]
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s_samples); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2252, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2252, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_sample, __pyx_t_6);
    __pyx_t_6 = 0;
+2253:             weight = np.exp(result.logwt[i] - result.logz[len(result.logz)-1])
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_exp); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s_logwt); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_10 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s_logz); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s_logz); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_18 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_18 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2253, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_19 = (__pyx_t_18 - 1);
    __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_t_19, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Subtract(__pyx_t_10, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_6 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF_SET(__pyx_v_weight, __pyx_t_6);
    __pyx_t_6 = 0;
+2254:             l_like = result.logl[i]
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s_logl); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2254, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = __Pyx_GetItemInt(__pyx_t_6, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2254, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF_SET(__pyx_v_l_like, __pyx_t_8);
    __pyx_t_8 = 0;
 2255:             # Get the parameters (in their original structure) from the flattened parameter vector.
+2256:             param_sample = sample[:param_length]
    __pyx_t_8 = __Pyx_PyObject_GetSlice(__pyx_v_sample, 0, 0, NULL, &__pyx_v_param_length, NULL, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2256, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_XDECREF_SET(__pyx_v_param_sample, __pyx_t_8);
    __pyx_t_8 = 0;
+2257:             orig_params = pyross.utils.unflatten_parameters(param_sample, param_guess_range,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyross); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_utils); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unflatten_parameters); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2258:                                                             is_scale_parameter, scaled_param_guesses)
    __pyx_t_1 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
        __pyx_t_4 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_6)) {
      PyObject *__pyx_temp[5] = {__pyx_t_1, __pyx_v_param_sample, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses};
      __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2257, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_8);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
      PyObject *__pyx_temp[5] = {__pyx_t_1, __pyx_v_param_sample, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses};
      __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2257, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_t_8);
    } else
    #endif
    {
      __pyx_t_2 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2257, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (__pyx_t_1) {
        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __pyx_t_1 = NULL;
      }
      __Pyx_INCREF(__pyx_v_param_sample);
      __Pyx_GIVEREF(__pyx_v_param_sample);
      PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_4, __pyx_v_param_sample);
      __Pyx_INCREF(__pyx_v_param_guess_range);
      __Pyx_GIVEREF(__pyx_v_param_guess_range);
      PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_4, __pyx_v_param_guess_range);
      __Pyx_INCREF(__pyx_v_is_scale_parameter);
      __Pyx_GIVEREF(__pyx_v_is_scale_parameter);
      PyTuple_SET_ITEM(__pyx_t_2, 2+__pyx_t_4, __pyx_v_is_scale_parameter);
      __Pyx_INCREF(__pyx_v_scaled_param_guesses);
      __Pyx_GIVEREF(__pyx_v_scaled_param_guesses);
      PyTuple_SET_ITEM(__pyx_t_2, 3+__pyx_t_4, __pyx_v_scaled_param_guesses);
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2257, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF_SET(__pyx_v_orig_params, __pyx_t_8);
    __pyx_t_8 = 0;
+2259:             init_sample = sample[param_length:]
    __pyx_t_8 = __Pyx_PyObject_GetSlice(__pyx_v_sample, 0, 0, &__pyx_v_param_length, NULL, NULL, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2259, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_XDECREF_SET(__pyx_v_init_sample, __pyx_t_8);
    __pyx_t_8 = 0;
 2260: 
+2261:             sample_params_dict, sample_control_params_dict = self.fill_params_dict(keys, orig_params, return_additional_params=True)
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_fill_params_dict); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2261, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2261, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_v_keys);
    __Pyx_GIVEREF(__pyx_v_keys);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_keys);
    __Pyx_INCREF(__pyx_v_orig_params);
    __Pyx_GIVEREF(__pyx_v_orig_params);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_orig_params);
    __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2261, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return_additional_params, Py_True) < 0) __PYX_ERR(0, 2261, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2261, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
      PyObject* sequence = __pyx_t_1;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 2261, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      #else
      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2261, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2261, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_8 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2261, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_7 = Py_TYPE(__pyx_t_8)->tp_iternext;
      index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_8); if (unlikely(!__pyx_t_2)) goto __pyx_L11_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_2);
      index = 1; __pyx_t_6 = __pyx_t_7(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L11_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_6);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_8), 2) < 0) __PYX_ERR(0, 2261, __pyx_L1_error)
      __pyx_t_7 = NULL;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L12_unpacking_done;
      __pyx_L11_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_7 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 2261, __pyx_L1_error)
      __pyx_L12_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_sample_params_dict, __pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_XDECREF_SET(__pyx_v_sample_control_params_dict, __pyx_t_6);
    __pyx_t_6 = 0;
+2262:             self.set_params(sample_params_dict)
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_params); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2262, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_v_sample_params_dict) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_sample_params_dict);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2262, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2263: 
+2264:             if generator is not None:
    __pyx_t_20 = (__pyx_v_generator != Py_None);
    __pyx_t_21 = (__pyx_t_20 != 0);
    if (__pyx_t_21) {
/* … */
    }
+2265:                 if intervention_fun is None:
      __pyx_t_21 = (__pyx_v_intervention_fun == Py_None);
      __pyx_t_20 = (__pyx_t_21 != 0);
      if (__pyx_t_20) {
/* … */
        goto __pyx_L14;
      }
+2266:                     self.contactMatrix = generator.constant_contactMatrix(**sample_control_params_dict)
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_constant_contactMatrix); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2266, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (unlikely(__pyx_v_sample_control_params_dict == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
          __PYX_ERR(0, 2266, __pyx_L1_error)
        }
        if (likely(PyDict_CheckExact(__pyx_v_sample_control_params_dict))) {
          __pyx_t_6 = PyDict_Copy(__pyx_v_sample_control_params_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2266, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
        } else {
          __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_sample_control_params_dict, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2266, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
        }
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2266, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_GIVEREF(__pyx_t_2);
        __Pyx_GOTREF(__pyx_v_self->contactMatrix);
        __Pyx_DECREF(__pyx_v_self->contactMatrix);
        __pyx_v_self->contactMatrix = __pyx_t_2;
        __pyx_t_2 = 0;
 2267:                 else:
+2268:                     self.contactMatrix = generator.intervention_custom_temporal(intervention_fun, **sample_control_params_dict)
      /*else*/ {
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_intervention_custom_temporal); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2268, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2268, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_v_intervention_fun);
        __Pyx_GIVEREF(__pyx_v_intervention_fun);
        PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_intervention_fun);
        if (unlikely(__pyx_v_sample_control_params_dict == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
          __PYX_ERR(0, 2268, __pyx_L1_error)
        }
        if (likely(PyDict_CheckExact(__pyx_v_sample_control_params_dict))) {
          __pyx_t_1 = PyDict_Copy(__pyx_v_sample_control_params_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2268, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
        } else {
          __pyx_t_1 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_sample_control_params_dict, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2268, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2268, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GIVEREF(__pyx_t_8);
        __Pyx_GOTREF(__pyx_v_self->contactMatrix);
        __Pyx_DECREF(__pyx_v_self->contactMatrix);
        __pyx_v_self->contactMatrix = __pyx_t_8;
        __pyx_t_8 = 0;
      }
      __pyx_L14:;
 2269: 
+2270:             sample_x0 = self._construct_inits(init_sample, init_flags, init_fltrs, obs0, fltr[0])
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_construct_inits); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2270, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_fltr, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2270, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_2 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_4 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[6] = {__pyx_t_2, __pyx_v_init_sample, __pyx_v_init_flags, __pyx_v_init_fltrs, __pyx_v_obs0, __pyx_t_6};
      __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2270, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[6] = {__pyx_t_2, __pyx_v_init_sample, __pyx_v_init_flags, __pyx_v_init_fltrs, __pyx_v_obs0, __pyx_t_6};
      __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2270, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    } else
    #endif
    {
      __pyx_t_10 = PyTuple_New(5+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2270, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_INCREF(__pyx_v_init_sample);
      __Pyx_GIVEREF(__pyx_v_init_sample);
      PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_4, __pyx_v_init_sample);
      __Pyx_INCREF(__pyx_v_init_flags);
      __Pyx_GIVEREF(__pyx_v_init_flags);
      PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_4, __pyx_v_init_flags);
      __Pyx_INCREF(__pyx_v_init_fltrs);
      __Pyx_GIVEREF(__pyx_v_init_fltrs);
      PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_4, __pyx_v_init_fltrs);
      __Pyx_INCREF(__pyx_v_obs0);
      __Pyx_GIVEREF(__pyx_v_obs0);
      PyTuple_SET_ITEM(__pyx_t_10, 3+__pyx_t_4, __pyx_v_obs0);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_10, 4+__pyx_t_4, __pyx_t_6);
      __pyx_t_6 = 0;
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_10, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2270, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_sample_x0, __pyx_t_8);
    __pyx_t_8 = 0;
+2271:             l_prior = np.sum(prior.logpdf(sample))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2271, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sum); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2271, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_prior, __pyx_n_s_logpdf); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2271, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_v_sample) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_sample);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2271, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_8 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_6, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_1);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2271, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF_SET(__pyx_v_l_prior, __pyx_t_8);
    __pyx_t_8 = 0;
+2272:             l_post = l_prior + l_like
    __pyx_t_8 = PyNumber_Add(__pyx_v_l_prior, __pyx_v_l_like); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2272, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_XDECREF_SET(__pyx_v_l_post, __pyx_t_8);
    __pyx_t_8 = 0;
 2273:             output_dict = {
+2274:                 'params_dict':sample_params_dict, 'x0':sample_x0, 'flat_params':sample,
    __pyx_t_8 = __Pyx_PyDict_NewPresized(15); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2274, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_params_dict, __pyx_v_sample_params_dict) < 0) __PYX_ERR(0, 2274, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_x0, __pyx_v_sample_x0) < 0) __PYX_ERR(0, 2274, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_flat_params, __pyx_v_sample) < 0) __PYX_ERR(0, 2274, __pyx_L1_error)
+2275:                 'log_posterior':l_post, 'log_prior':l_prior, 'log_likelihood':l_like,
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_log_posterior, __pyx_v_l_post) < 0) __PYX_ERR(0, 2274, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_log_prior, __pyx_v_l_prior) < 0) __PYX_ERR(0, 2274, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_log_likelihood, __pyx_v_l_like) < 0) __PYX_ERR(0, 2274, __pyx_L1_error)
+2276:                 'weight':weight, 'param_keys': keys, 'param_guess_range': param_guess_range,
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_weight, __pyx_v_weight) < 0) __PYX_ERR(0, 2274, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_param_keys, __pyx_v_keys) < 0) __PYX_ERR(0, 2274, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_param_guess_range, __pyx_v_param_guess_range) < 0) __PYX_ERR(0, 2274, __pyx_L1_error)
+2277:                 'is_scale_parameter':is_scale_parameter, 'param_length':param_length,
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_is_scale_parameter, __pyx_v_is_scale_parameter) < 0) __PYX_ERR(0, 2274, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_param_length, __pyx_v_param_length) < 0) __PYX_ERR(0, 2274, __pyx_L1_error)
+2278:                 'scaled_param_guesses':scaled_param_guesses,
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_scaled_param_guesses, __pyx_v_scaled_param_guesses) < 0) __PYX_ERR(0, 2274, __pyx_L1_error)
+2279:                 'init_flags': init_flags, 'init_fltrs': init_fltrs,
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_init_flags, __pyx_v_init_flags) < 0) __PYX_ERR(0, 2274, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_init_fltrs, __pyx_v_init_fltrs) < 0) __PYX_ERR(0, 2274, __pyx_L1_error)
+2280:                 'prior':prior
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_prior, __pyx_v_prior) < 0) __PYX_ERR(0, 2274, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_output_dict, ((PyObject*)__pyx_t_8));
    __pyx_t_8 = 0;
 2281:             }
 2282: 
+2283:             if sample_control_params_dict != {}:
    __pyx_t_8 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_10 = PyObject_RichCompare(__pyx_v_sample_control_params_dict, __pyx_t_8, Py_NE); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2283, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_20 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_20 < 0)) __PYX_ERR(0, 2283, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (__pyx_t_20) {
/* … */
    }
+2284:                 output_dict['control_params_dict'] = sample_control_params_dict
      if (unlikely(PyDict_SetItem(__pyx_v_output_dict, __pyx_n_u_control_params_dict, __pyx_v_sample_control_params_dict) < 0)) __PYX_ERR(0, 2284, __pyx_L1_error)
 2285: 
+2286:             output_samples.append(output_dict)
    __pyx_t_22 = __Pyx_PyList_Append(__pyx_v_output_samples, __pyx_v_output_dict); if (unlikely(__pyx_t_22 == ((int)-1))) __PYX_ERR(0, 2286, __pyx_L1_error)
  }
 2287: 
+2288:         return result, output_samples
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2288, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_INCREF(__pyx_v_result);
  __Pyx_GIVEREF(__pyx_v_result);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_result);
  __Pyx_INCREF(__pyx_v_output_samples);
  __Pyx_GIVEREF(__pyx_v_output_samples);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_output_samples);
  __pyx_r = __pyx_t_10;
  __pyx_t_10 = 0;
  goto __pyx_L0;
 2289: 
+2290:     def latent_infer_mcmc(self, np.ndarray obs, np.ndarray fltr, Tf, param_priors, init_priors, contactMatrix=None, generator=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_79latent_infer_mcmc(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_78latent_infer_mcmc[] = " Sample the posterior distribution of the initial conditions and all desired parameters, including control parameters, using\n        ensemble MCMC. This requires the optional dependency `emcee`.\n\n        Parameters\n        ----------\n        obs: 2d numpy.array\n            The observed trajectories with reduced number of variables\n            (number of data points, (age groups * observed model classes))\n        fltr: 2d numpy.array\n            A matrix of shape (no. observed variables, no. total variables),\n            such that obs_{ti} = fltr_{ij} * X_{tj}\n        Tf: float\n            Total time of the trajectory\n        contactMatrix: callable\n            A function that returns the contact matrix at time t (input).\n        param_priors: dict\n            A dictionary for priors for the model parameters.\n            See `latent_infer_parameters` for further explanations.\n        init_priors: dict\n            A dictionary for priors for the initial conditions.\n            See `latent_infer_parameters` for further explanations.\n        tangent: bool, optional\n            Set to True to use tangent space inference. Default is False.\n        verbose: bool, optional\n            Set to True to see a progress bar for the sample generation. Default is False.\n        sampler: emcee.EnsembleSampler, optional\n            Set to instance of the sampler (as returned by this function) to continue running the MCMC chains.\n            Default is None (i.e. run a new chain).\n        nwalkers:int, optional\n            The number of chains in the ensemble (should be at least 2*dim). Default is 2*dim.\n        walker_pos: np.array, optional\n            The initial position of the walkers. If not specified, the function samples random positions from the prior.\n        nsamples:int, optional\n            The number of samples per walker. Default is 1000.\n        nprocesses: int, optional\n            The number of processes used to compute the likeliho""od for the walkers, needs `pathos` for values > 1.\n            Default is the number of cpu cores if `pathos` is available, otherwise 1.\n\n        Returns\n        -------\n        sampler: emcee.EnsembleSampler\n            This function returns the state of the sampler. To look at the chain of the internal flattened parameters,\n            run `sampler.get_chain()`. Use this to judge whether the chain has sufficiently converged. Either rerun\n            `latent_infer_mcmc(..., sampler=sampler)` to continue the chain or `latent_infer_mcmc_process_result(...)`\n            to process the result.\n\n        Examples\n        --------\n        For the structure of the model input parameters, in particular `param_priors, init_priors`, see the documentation\n        of `latent_infer`. To start sampling the posterior, run for example\n\n        >>> sampler = estimator.latent_infer_mcmc(obs, fltr, Tf, param_priors, init_priors, contactMatrix=contactMatrix,\n                                                  verbose=True)\n\n        To judge the convergence of this chain, we can look at the trace plot of all the chains (for a moderate number of\n        dimensions `dim`)\n\n        >>> fig, axes = plt.subplots(dim, sharex=True)\n        >>> samples = sampler.get_chain()\n        >>> for i in range(dim):\n                ax = axes[i]\n                ax.plot(samples[:, :, i], \"k\", alpha=0.3)\n                ax.set_xlim(0, len(samples))\n        >>> axes[-1].set_xlabel(\"step number\");\n\n        For more detailed convergence metrics, see the documentation of `emcee`. To continue running this chain, we can\n        call this function again with the sampler as argument\n\n        >>> sampler = estimator.latent_infer_mcmc(obs, fltr, Tf, param_priors, init_priors, contactMatrix=contactMatrix,\n                                                  verbose=True, sampler=sampler)\n\n        This procudes 1000 additional samples in each chain. To process the results, call\n     ""   `pyross.inference.latent_infer_mcmc_process_result`.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_79latent_infer_mcmc(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_obs = 0;
  PyArrayObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_param_priors = 0;
  PyObject *__pyx_v_init_priors = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_verbose = 0;
  PyObject *__pyx_v_sampler = 0;
  PyObject *__pyx_v_nwalkers = 0;
  PyObject *__pyx_v_walker_pos = 0;
  PyObject *__pyx_v_nsamples = 0;
  PyObject *__pyx_v_nprocesses = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_infer_mcmc (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_param_priors,&__pyx_n_s_init_priors,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_tangent,&__pyx_n_s_verbose,&__pyx_n_s_sampler,&__pyx_n_s_nwalkers,&__pyx_n_s_walker_pos,&__pyx_n_s_nsamples,&__pyx_n_s_nprocesses,0};
    PyObject* values[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_78latent_infer_mcmc(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyArrayObject *__pyx_v_obs, PyArrayObject *__pyx_v_fltr, PyObject *__pyx_v_Tf, PyObject *__pyx_v_param_priors, PyObject *__pyx_v_init_priors, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_tangent, PyObject *__pyx_v_verbose, PyObject *__pyx_v_sampler, PyObject *__pyx_v_nwalkers, PyObject *__pyx_v_walker_pos, PyObject *__pyx_v_nsamples, PyObject *__pyx_v_nprocesses) {
  PyObject *__pyx_v_obs0 = NULL;
  PyObject *__pyx_v_param_prior_names = NULL;
  PyObject *__pyx_v_keys = NULL;
  PyObject *__pyx_v_param_guess = NULL;
  PyObject *__pyx_v_param_stds = NULL;
  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
  PyObject *__pyx_v_param_bounds = NULL;
  PyObject *__pyx_v_param_guess_range = NULL;
  PyObject *__pyx_v_is_scale_parameter = NULL;
  PyObject *__pyx_v_scaled_param_guesses = NULL;
  PyObject *__pyx_v_init_prior_names = NULL;
  PyObject *__pyx_v_init_guess = NULL;
  PyObject *__pyx_v_init_stds = NULL;
  PyObject *__pyx_v_init_bounds = NULL;
  PyObject *__pyx_v_init_flags = NULL;
  PyObject *__pyx_v_init_fltrs = NULL;
  PyObject *__pyx_v_param_length = NULL;
  PyObject *__pyx_v_guess = NULL;
  PyObject *__pyx_v_stds = NULL;
  PyObject *__pyx_v_bounds = NULL;
  PyObject *__pyx_v_prior = NULL;
  PyObject *__pyx_v_ndim = NULL;
  PyObject *__pyx_v_logpost_args = NULL;
  PyObject *__pyx_v_points = NULL;
  PyObject *__pyx_v_p0 = NULL;
  PyObject *__pyx_v_mcmc_pool = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_infer_mcmc", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_obs);
  __Pyx_INCREF((PyObject *)__pyx_v_fltr);
  __Pyx_INCREF(__pyx_v_sampler);
  __Pyx_INCREF(__pyx_v_nwalkers);
  __Pyx_INCREF(__pyx_v_nprocesses);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_infer_mcmc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_obs0);
  __Pyx_XDECREF(__pyx_v_param_prior_names);
  __Pyx_XDECREF(__pyx_v_keys);
  __Pyx_XDECREF(__pyx_v_param_guess);
  __Pyx_XDECREF(__pyx_v_param_stds);
  __Pyx_XDECREF(__pyx_v__);
  __Pyx_XDECREF(__pyx_v_param_bounds);
  __Pyx_XDECREF(__pyx_v_param_guess_range);
  __Pyx_XDECREF(__pyx_v_is_scale_parameter);
  __Pyx_XDECREF(__pyx_v_scaled_param_guesses);
  __Pyx_XDECREF(__pyx_v_init_prior_names);
  __Pyx_XDECREF(__pyx_v_init_guess);
  __Pyx_XDECREF(__pyx_v_init_stds);
  __Pyx_XDECREF(__pyx_v_init_bounds);
  __Pyx_XDECREF(__pyx_v_init_flags);
  __Pyx_XDECREF(__pyx_v_init_fltrs);
  __Pyx_XDECREF(__pyx_v_param_length);
  __Pyx_XDECREF(__pyx_v_guess);
  __Pyx_XDECREF(__pyx_v_stds);
  __Pyx_XDECREF(__pyx_v_bounds);
  __Pyx_XDECREF(__pyx_v_prior);
  __Pyx_XDECREF(__pyx_v_ndim);
  __Pyx_XDECREF(__pyx_v_logpost_args);
  __Pyx_XDECREF(__pyx_v_points);
  __Pyx_XDECREF(__pyx_v_p0);
  __Pyx_XDECREF(__pyx_v_mcmc_pool);
  __Pyx_XDECREF((PyObject *)__pyx_v_obs);
  __Pyx_XDECREF((PyObject *)__pyx_v_fltr);
  __Pyx_XDECREF(__pyx_v_sampler);
  __Pyx_XDECREF(__pyx_v_nwalkers);
  __Pyx_XDECREF(__pyx_v_nprocesses);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2291:                           intervention_fun=None, tangent=False, verbose=False, sampler=None, nwalkers=None, walker_pos=None,
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)Py_False);
    values[9] = ((PyObject *)Py_False);
    values[10] = ((PyObject *)Py_None);
    values[11] = ((PyObject *)Py_None);
    values[12] = ((PyObject *)Py_None);
    values[13] = ((PyObject *)__pyx_int_1000);
    values[14] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_mcmc", 0, 5, 15, 1); __PYX_ERR(0, 2290, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_mcmc", 0, 5, 15, 2); __PYX_ERR(0, 2290, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_mcmc", 0, 5, 15, 3); __PYX_ERR(0, 2290, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_mcmc", 0, 5, 15, 4); __PYX_ERR(0, 2290, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_verbose);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sampler);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nwalkers);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_walker_pos);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nsamples);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nprocesses);
          if (value) { values[14] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "latent_infer_mcmc") < 0)) __PYX_ERR(0, 2290, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obs = ((PyArrayObject *)values[0]);
    __pyx_v_fltr = ((PyArrayObject *)values[1]);
    __pyx_v_Tf = values[2];
    __pyx_v_param_priors = values[3];
    __pyx_v_init_priors = values[4];
    __pyx_v_contactMatrix = values[5];
    __pyx_v_generator = values[6];
    __pyx_v_intervention_fun = values[7];
    __pyx_v_tangent = values[8];
    __pyx_v_verbose = values[9];
    __pyx_v_sampler = values[10];
    __pyx_v_nwalkers = values[11];
    __pyx_v_walker_pos = values[12];
    __pyx_v_nsamples = values[13];
    __pyx_v_nprocesses = values[14];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("latent_infer_mcmc", 0, 5, 15, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2290, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_infer_mcmc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obs), __pyx_ptype_5numpy_ndarray, 1, "obs", 0))) __PYX_ERR(0, 2290, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fltr), __pyx_ptype_5numpy_ndarray, 1, "fltr", 0))) __PYX_ERR(0, 2290, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_78latent_infer_mcmc(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_param_priors, __pyx_v_init_priors, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_verbose, __pyx_v_sampler, __pyx_v_nwalkers, __pyx_v_walker_pos, __pyx_v_nsamples, __pyx_v_nprocesses);
 2292:                           nsamples=1000, nprocesses=0):
 2293:         """ Sample the posterior distribution of the initial conditions and all desired parameters, including control parameters, using
 2294:         ensemble MCMC. This requires the optional dependency `emcee`.
 2295: 
 2296:         Parameters
 2297:         ----------
 2298:         obs: 2d numpy.array
 2299:             The observed trajectories with reduced number of variables
 2300:             (number of data points, (age groups * observed model classes))
 2301:         fltr: 2d numpy.array
 2302:             A matrix of shape (no. observed variables, no. total variables),
 2303:             such that obs_{ti} = fltr_{ij} * X_{tj}
 2304:         Tf: float
 2305:             Total time of the trajectory
 2306:         contactMatrix: callable
 2307:             A function that returns the contact matrix at time t (input).
 2308:         param_priors: dict
 2309:             A dictionary for priors for the model parameters.
 2310:             See `latent_infer_parameters` for further explanations.
 2311:         init_priors: dict
 2312:             A dictionary for priors for the initial conditions.
 2313:             See `latent_infer_parameters` for further explanations.
 2314:         tangent: bool, optional
 2315:             Set to True to use tangent space inference. Default is False.
 2316:         verbose: bool, optional
 2317:             Set to True to see a progress bar for the sample generation. Default is False.
 2318:         sampler: emcee.EnsembleSampler, optional
 2319:             Set to instance of the sampler (as returned by this function) to continue running the MCMC chains.
 2320:             Default is None (i.e. run a new chain).
 2321:         nwalkers:int, optional
 2322:             The number of chains in the ensemble (should be at least 2*dim). Default is 2*dim.
 2323:         walker_pos: np.array, optional
 2324:             The initial position of the walkers. If not specified, the function samples random positions from the prior.
 2325:         nsamples:int, optional
 2326:             The number of samples per walker. Default is 1000.
 2327:         nprocesses: int, optional
 2328:             The number of processes used to compute the likelihood for the walkers, needs `pathos` for values > 1.
 2329:             Default is the number of cpu cores if `pathos` is available, otherwise 1.
 2330: 
 2331:         Returns
 2332:         -------
 2333:         sampler: emcee.EnsembleSampler
 2334:             This function returns the state of the sampler. To look at the chain of the internal flattened parameters,
 2335:             run `sampler.get_chain()`. Use this to judge whether the chain has sufficiently converged. Either rerun
 2336:             `latent_infer_mcmc(..., sampler=sampler)` to continue the chain or `latent_infer_mcmc_process_result(...)`
 2337:             to process the result.
 2338: 
 2339:         Examples
 2340:         --------
 2341:         For the structure of the model input parameters, in particular `param_priors, init_priors`, see the documentation
 2342:         of `latent_infer`. To start sampling the posterior, run for example
 2343: 
 2344:         >>> sampler = estimator.latent_infer_mcmc(obs, fltr, Tf, param_priors, init_priors, contactMatrix=contactMatrix,
 2345:                                                   verbose=True)
 2346: 
 2347:         To judge the convergence of this chain, we can look at the trace plot of all the chains (for a moderate number of
 2348:         dimensions `dim`)
 2349: 
 2350:         >>> fig, axes = plt.subplots(dim, sharex=True)
 2351:         >>> samples = sampler.get_chain()
 2352:         >>> for i in range(dim):
 2353:                 ax = axes[i]
 2354:                 ax.plot(samples[:, :, i], "k", alpha=0.3)
 2355:                 ax.set_xlim(0, len(samples))
 2356:         >>> axes[-1].set_xlabel("step number");
 2357: 
 2358:         For more detailed convergence metrics, see the documentation of `emcee`. To continue running this chain, we can
 2359:         call this function again with the sampler as argument
 2360: 
 2361:         >>> sampler = estimator.latent_infer_mcmc(obs, fltr, Tf, param_priors, init_priors, contactMatrix=contactMatrix,
 2362:                                                   verbose=True, sampler=sampler)
 2363: 
 2364:         This procudes 1000 additional samples in each chain. To process the results, call
 2365:         `pyross.inference.latent_infer_mcmc_process_result`.
 2366:         """
+2367:         if emcee is None:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_emcee); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2367, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 == Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+2368:             raise Exception("MCMC sampling needs optional dependency `emcee` which was not found.")
    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2368, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 2368, __pyx_L1_error)
 2369: 
+2370:         if nprocesses == 0:
  __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_nprocesses, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2370, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {
/* … */
  }
+2371:             if pathos_mp:
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pathos_mp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2371, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L5;
    }
 2372:                 # Optional dependecy for multiprocessing (pathos) is installed.
+2373:                 nprocesses = pathos_mp.cpu_count()
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pathos_mp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_cpu_count); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF_SET(__pyx_v_nprocesses, __pyx_t_1);
      __pyx_t_1 = 0;
 2374:             else:
+2375:                 nprocesses = 1
    /*else*/ {
      __Pyx_INCREF(__pyx_int_1);
      __Pyx_DECREF_SET(__pyx_v_nprocesses, __pyx_int_1);
    }
    __pyx_L5:;
 2376: 
+2377:         if nprocesses > 1 and pathos_mp is None:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_nprocesses, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2377, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 2377, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L7_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pathos_mp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2377, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 == Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = (__pyx_t_2 != 0);
  __pyx_t_3 = __pyx_t_6;
  __pyx_L7_bool_binop_done:;
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+2378:             raise Exception("The Python package `pathos` is needed for multiprocessing.")
    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2378, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 2378, __pyx_L1_error)
 2379: 
 2380:         # Sanity checks of the inputs
+2381:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2381, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2381, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2381, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2381, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_v_intervention_fun);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2381, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2382: 
 2383:         # Process fltr and obs
+2384:         fltr, obs, obs0 = pyross.utils.process_latent_data(fltr, obs)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyross); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2384, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_utils); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2384, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_process_latent_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2384, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_8, ((PyObject *)__pyx_v_fltr), ((PyObject *)__pyx_v_obs)};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2384, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_8, ((PyObject *)__pyx_v_fltr), ((PyObject *)__pyx_v_obs)};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2384, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2384, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_8) {
      __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_8); __pyx_t_8 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_v_fltr));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_fltr));
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_7, ((PyObject *)__pyx_v_fltr));
    __Pyx_INCREF(((PyObject *)__pyx_v_obs));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_obs));
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_7, ((PyObject *)__pyx_v_obs));
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2384, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2384, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_8);
    #else
    __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2384, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2384, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2384, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_9 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2384, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
    index = 0; __pyx_t_5 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_5)) goto __pyx_L9_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    index = 1; __pyx_t_4 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_4)) goto __pyx_L9_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    index = 2; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L9_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_8);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 3) < 0) __PYX_ERR(0, 2384, __pyx_L1_error)
    __pyx_t_10 = NULL;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    goto __pyx_L10_unpacking_done;
    __pyx_L9_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_10 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2384, __pyx_L1_error)
    __pyx_L10_unpacking_done:;
  }
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 2384, __pyx_L1_error)
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 2384, __pyx_L1_error)
  __Pyx_DECREF_SET(__pyx_v_fltr, ((PyArrayObject *)__pyx_t_5));
  __pyx_t_5 = 0;
  __Pyx_DECREF_SET(__pyx_v_obs, ((PyArrayObject *)__pyx_t_4));
  __pyx_t_4 = 0;
  __pyx_v_obs0 = __pyx_t_8;
  __pyx_t_8 = 0;
 2385: 
 2386:         # Read in parameter priors
+2387:         param_prior_names, keys, param_guess, param_stds, _, _, param_bounds, param_guess_range, \
  __pyx_v_param_prior_names = __pyx_t_8;
  __pyx_t_8 = 0;
  __pyx_v_keys = __pyx_t_4;
  __pyx_t_4 = 0;
  __pyx_v_param_guess = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_param_stds = __pyx_t_9;
  __pyx_t_9 = 0;
  __pyx_v__ = __pyx_t_11;
  __pyx_t_11 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_12);
  __pyx_t_12 = 0;
  __pyx_v_param_bounds = __pyx_t_13;
  __pyx_t_13 = 0;
  __pyx_v_param_guess_range = __pyx_t_14;
  __pyx_t_14 = 0;
  __pyx_v_is_scale_parameter = __pyx_t_15;
  __pyx_t_15 = 0;
  __pyx_v_scaled_param_guesses = __pyx_t_16;
  __pyx_t_16 = 0;
 2388:         is_scale_parameter, scaled_param_guesses \
+2389:             = pyross.utils.parse_param_prior_dict(param_priors, self.M, check_length=(not self.param_mapping_enabled))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyross); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_utils); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_parse_param_prior_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_self->M); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_v_param_priors);
  __Pyx_GIVEREF(__pyx_v_param_priors);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_param_priors);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_8);
  __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_5 = __Pyx_PyBool_FromLong((!(__pyx_v_self->param_mapping_enabled != 0))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_check_length, __pyx_t_5) < 0) __PYX_ERR(0, 2389, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
    PyObject* sequence = __pyx_t_5;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 10)) {
      if (size > 10) __Pyx_RaiseTooManyValuesError(10);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2387, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 5); 
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 6); 
      __pyx_t_14 = PyTuple_GET_ITEM(sequence, 7); 
      __pyx_t_15 = PyTuple_GET_ITEM(sequence, 8); 
      __pyx_t_16 = PyTuple_GET_ITEM(sequence, 9); 
    } else {
      __pyx_t_8 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_12 = PyList_GET_ITEM(sequence, 5); 
      __pyx_t_13 = PyList_GET_ITEM(sequence, 6); 
      __pyx_t_14 = PyList_GET_ITEM(sequence, 7); 
      __pyx_t_15 = PyList_GET_ITEM(sequence, 8); 
      __pyx_t_16 = PyList_GET_ITEM(sequence, 9); 
    }
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_t_12);
    __Pyx_INCREF(__pyx_t_13);
    __Pyx_INCREF(__pyx_t_14);
    __Pyx_INCREF(__pyx_t_15);
    __Pyx_INCREF(__pyx_t_16);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[10] = {&__pyx_t_8,&__pyx_t_4,&__pyx_t_1,&__pyx_t_9,&__pyx_t_11,&__pyx_t_12,&__pyx_t_13,&__pyx_t_14,&__pyx_t_15,&__pyx_t_16};
      for (i=0; i < 10; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 2387, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[10] = {&__pyx_t_8,&__pyx_t_4,&__pyx_t_1,&__pyx_t_9,&__pyx_t_11,&__pyx_t_12,&__pyx_t_13,&__pyx_t_14,&__pyx_t_15,&__pyx_t_16};
    __pyx_t_17 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2387, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_10 = Py_TYPE(__pyx_t_17)->tp_iternext;
    for (index=0; index < 10; index++) {
      PyObject* item = __pyx_t_10(__pyx_t_17); if (unlikely(!item)) goto __pyx_L11_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_17), 10) < 0) __PYX_ERR(0, 2387, __pyx_L1_error)
    __pyx_t_10 = NULL;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    goto __pyx_L12_unpacking_done;
    __pyx_L11_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    __pyx_t_10 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2387, __pyx_L1_error)
    __pyx_L12_unpacking_done:;
  }
 2390: 
 2391:         # Read in initial conditions priors
+2392:         init_prior_names, init_guess, init_stds, _, _,init_bounds, init_flags, init_fltrs \
  __pyx_v_init_prior_names = __pyx_t_16;
  __pyx_t_16 = 0;
  __pyx_v_init_guess = __pyx_t_12;
  __pyx_t_12 = 0;
  __pyx_v_init_stds = __pyx_t_14;
  __pyx_t_14 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_15);
  __pyx_t_15 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_13);
  __pyx_t_13 = 0;
  __pyx_v_init_bounds = __pyx_t_11;
  __pyx_t_11 = 0;
  __pyx_v_init_flags = __pyx_t_9;
  __pyx_t_9 = 0;
  __pyx_v_init_fltrs = __pyx_t_1;
  __pyx_t_1 = 0;
+2393:             = pyross.utils.parse_init_prior_dict(init_priors, self.dim, len(obs0))
  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_n_s_pyross); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_utils); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_parse_init_prior_dict); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_18 = PyObject_Length(__pyx_v_obs0); if (unlikely(__pyx_t_18 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2393, __pyx_L1_error)
  __pyx_t_14 = PyInt_FromSsize_t(__pyx_t_18); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_13 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) {
    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_16);
    if (likely(__pyx_t_13)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_16, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_16)) {
    PyObject *__pyx_temp[4] = {__pyx_t_13, __pyx_v_init_priors, __pyx_t_15, __pyx_t_14};
    __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_16, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2393, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_16)) {
    PyObject *__pyx_temp[4] = {__pyx_t_13, __pyx_v_init_priors, __pyx_t_15, __pyx_t_14};
    __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_16, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2393, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  } else
  #endif
  {
    __pyx_t_12 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2393, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    if (__pyx_t_13) {
      __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_13); __pyx_t_13 = NULL;
    }
    __Pyx_INCREF(__pyx_v_init_priors);
    __Pyx_GIVEREF(__pyx_v_init_priors);
    PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_7, __pyx_v_init_priors);
    __Pyx_GIVEREF(__pyx_t_15);
    PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_7, __pyx_t_15);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_7, __pyx_t_14);
    __pyx_t_15 = 0;
    __pyx_t_14 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_16, __pyx_t_12, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2393, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  }
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
    PyObject* sequence = __pyx_t_5;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 8)) {
      if (size > 8) __Pyx_RaiseTooManyValuesError(8);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2392, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_16 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_14 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_15 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 5); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 6); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 7); 
    } else {
      __pyx_t_16 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_12 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_14 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_15 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_13 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 5); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 6); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 7); 
    }
    __Pyx_INCREF(__pyx_t_16);
    __Pyx_INCREF(__pyx_t_12);
    __Pyx_INCREF(__pyx_t_14);
    __Pyx_INCREF(__pyx_t_15);
    __Pyx_INCREF(__pyx_t_13);
    __Pyx_INCREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_1);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[8] = {&__pyx_t_16,&__pyx_t_12,&__pyx_t_14,&__pyx_t_15,&__pyx_t_13,&__pyx_t_11,&__pyx_t_9,&__pyx_t_1};
      for (i=0; i < 8; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 2392, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[8] = {&__pyx_t_16,&__pyx_t_12,&__pyx_t_14,&__pyx_t_15,&__pyx_t_13,&__pyx_t_11,&__pyx_t_9,&__pyx_t_1};
    __pyx_t_4 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2392, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_10 = Py_TYPE(__pyx_t_4)->tp_iternext;
    for (index=0; index < 8; index++) {
      PyObject* item = __pyx_t_10(__pyx_t_4); if (unlikely(!item)) goto __pyx_L13_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_4), 8) < 0) __PYX_ERR(0, 2392, __pyx_L1_error)
    __pyx_t_10 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L14_unpacking_done;
    __pyx_L13_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_10 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2392, __pyx_L1_error)
    __pyx_L14_unpacking_done:;
  }
 2394: 
 2395:         # Concatenate the flattend parameter guess with init guess
+2396:         param_length = param_guess.shape[0]
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_param_guess, __pyx_n_s_shape); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2396, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_5, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2396, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_param_length = __pyx_t_1;
  __pyx_t_1 = 0;
+2397:         guess = np.concatenate([param_guess, init_guess]).astype(DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyList_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_INCREF(__pyx_v_param_guess);
  __Pyx_GIVEREF(__pyx_v_param_guess);
  PyList_SET_ITEM(__pyx_t_9, 0, __pyx_v_param_guess);
  __Pyx_INCREF(__pyx_v_init_guess);
  __Pyx_GIVEREF(__pyx_v_init_guess);
  PyList_SET_ITEM(__pyx_t_9, 1, __pyx_v_init_guess);
  __pyx_t_13 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_13)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
    }
  }
  __pyx_t_5 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_13, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9);
  __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_astype); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_9 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
    }
  }
  __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_9, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_v_guess = __pyx_t_1;
  __pyx_t_1 = 0;
+2398:         stds = np.concatenate([param_stds,init_stds]).astype(DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_param_stds);
  __Pyx_GIVEREF(__pyx_v_param_stds);
  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_v_param_stds);
  __Pyx_INCREF(__pyx_v_init_stds);
  __Pyx_GIVEREF(__pyx_v_init_stds);
  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_v_init_stds);
  __pyx_t_13 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_9);
    if (likely(__pyx_t_13)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_9, function);
    }
  }
  __pyx_t_11 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_13, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_astype); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_9);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_9, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_5, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_11);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_stds = __pyx_t_1;
  __pyx_t_1 = 0;
+2399:         bounds = np.concatenate([param_bounds, init_bounds], axis=0).astype(DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2399, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2399, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyList_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2399, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_INCREF(__pyx_v_param_bounds);
  __Pyx_GIVEREF(__pyx_v_param_bounds);
  PyList_SET_ITEM(__pyx_t_9, 0, __pyx_v_param_bounds);
  __Pyx_INCREF(__pyx_v_init_bounds);
  __Pyx_GIVEREF(__pyx_v_init_bounds);
  PyList_SET_ITEM(__pyx_t_9, 1, __pyx_v_init_bounds);
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2399, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_9);
  __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2399, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 2399, __pyx_L1_error)
  __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_5, __pyx_t_9); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2399, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_astype); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2399, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2399, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_9);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_9, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_5, __pyx_t_13) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_13);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2399, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_bounds = __pyx_t_1;
  __pyx_t_1 = 0;
 2400: 
+2401:         prior = Prior(param_prior_names+init_prior_names, bounds, guess, stds)
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_Prior); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2401, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_13 = PyNumber_Add(__pyx_v_param_prior_names, __pyx_v_init_prior_names); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2401, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_5 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_9);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_9, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_9)) {
    PyObject *__pyx_temp[5] = {__pyx_t_5, __pyx_t_13, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_7, 4+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2401, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
    PyObject *__pyx_temp[5] = {__pyx_t_5, __pyx_t_13, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_7, 4+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2401, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  } else
  #endif
  {
    __pyx_t_11 = PyTuple_New(4+__pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2401, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_13);
    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_7, __pyx_t_13);
    __Pyx_INCREF(__pyx_v_bounds);
    __Pyx_GIVEREF(__pyx_v_bounds);
    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_7, __pyx_v_bounds);
    __Pyx_INCREF(__pyx_v_guess);
    __Pyx_GIVEREF(__pyx_v_guess);
    PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_7, __pyx_v_guess);
    __Pyx_INCREF(__pyx_v_stds);
    __Pyx_GIVEREF(__pyx_v_stds);
    PyTuple_SET_ITEM(__pyx_t_11, 3+__pyx_t_7, __pyx_v_stds);
    __pyx_t_13 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2401, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  }
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_prior = __pyx_t_1;
  __pyx_t_1 = 0;
 2402: 
+2403:         ndim = len(guess)
  __pyx_t_18 = PyObject_Length(__pyx_v_guess); if (unlikely(__pyx_t_18 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2403, __pyx_L1_error)
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_18); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2403, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_ndim = __pyx_t_1;
  __pyx_t_1 = 0;
 2404: 
+2405:         if nwalkers is None:
  __pyx_t_3 = (__pyx_v_nwalkers == Py_None);
  __pyx_t_6 = (__pyx_t_3 != 0);
  if (__pyx_t_6) {
/* … */
  }
+2406:             nwalkers = 2*ndim
    __pyx_t_1 = PyNumber_Multiply(__pyx_int_2, __pyx_v_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2406, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_nwalkers, __pyx_t_1);
    __pyx_t_1 = 0;
 2407: 
+2408:         logpost_args = {'generator':generator, 'intervention_fun':intervention_fun, 'bounds':bounds, 'param_keys':keys,
  __pyx_t_1 = __Pyx_PyDict_NewPresized(16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_generator, __pyx_v_generator) < 0) __PYX_ERR(0, 2408, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_intervention_fun, __pyx_v_intervention_fun) < 0) __PYX_ERR(0, 2408, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_bounds, __pyx_v_bounds) < 0) __PYX_ERR(0, 2408, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_param_keys, __pyx_v_keys) < 0) __PYX_ERR(0, 2408, __pyx_L1_error)
+2409:                         'param_guess_range':param_guess_range, 'is_scale_parameter':is_scale_parameter,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_param_guess_range, __pyx_v_param_guess_range) < 0) __PYX_ERR(0, 2408, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_is_scale_parameter, __pyx_v_is_scale_parameter) < 0) __PYX_ERR(0, 2408, __pyx_L1_error)
+2410:                         'scaled_param_guesses':scaled_param_guesses, 'param_length':param_length, 'obs':obs,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_scaled_param_guesses, __pyx_v_scaled_param_guesses) < 0) __PYX_ERR(0, 2408, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_param_length, __pyx_v_param_length) < 0) __PYX_ERR(0, 2408, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_obs, ((PyObject *)__pyx_v_obs)) < 0) __PYX_ERR(0, 2408, __pyx_L1_error)
+2411:                         'fltr':fltr, 'Tf':Tf, 'obs0':obs0, 'init_flags':init_flags, 'init_fltrs': init_fltrs,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_fltr, ((PyObject *)__pyx_v_fltr)) < 0) __PYX_ERR(0, 2408, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_Tf, __pyx_v_Tf) < 0) __PYX_ERR(0, 2408, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_obs0, __pyx_v_obs0) < 0) __PYX_ERR(0, 2408, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_init_flags, __pyx_v_init_flags) < 0) __PYX_ERR(0, 2408, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_init_fltrs, __pyx_v_init_fltrs) < 0) __PYX_ERR(0, 2408, __pyx_L1_error)
+2412:                         'prior':prior, 'tangent':tangent}
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_prior, __pyx_v_prior) < 0) __PYX_ERR(0, 2408, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_tangent, __pyx_v_tangent) < 0) __PYX_ERR(0, 2408, __pyx_L1_error)
  __pyx_v_logpost_args = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 2413: 
+2414:         if walker_pos is None:
  __pyx_t_6 = (__pyx_v_walker_pos == Py_None);
  __pyx_t_3 = (__pyx_t_6 != 0);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L16;
  }
 2415:              # If not specified, sample initial positions of walkers from prior (within bounds).
+2416:             points = np.random.rand(nwalkers, ndim)
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2416, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_random); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2416, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_rand); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2416, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
        __pyx_t_7 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_9)) {
      PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_v_nwalkers, __pyx_v_ndim};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2416, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
      PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_v_nwalkers, __pyx_v_ndim};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2416, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    {
      __pyx_t_13 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2416, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      if (__pyx_t_11) {
        __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_11); __pyx_t_11 = NULL;
      }
      __Pyx_INCREF(__pyx_v_nwalkers);
      __Pyx_GIVEREF(__pyx_v_nwalkers);
      PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_7, __pyx_v_nwalkers);
      __Pyx_INCREF(__pyx_v_ndim);
      __Pyx_GIVEREF(__pyx_v_ndim);
      PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_7, __pyx_v_ndim);
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_13, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2416, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_v_points = __pyx_t_1;
    __pyx_t_1 = 0;
+2417:             p0 = prior.ppf(points)
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_prior, __pyx_n_s_ppf); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_13 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
      }
    }
    __pyx_t_1 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_13, __pyx_v_points) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_points);
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_v_p0 = __pyx_t_1;
    __pyx_t_1 = 0;
 2418:         else:
+2419:             p0 = walker_pos
  /*else*/ {
    __Pyx_INCREF(__pyx_v_walker_pos);
    __pyx_v_p0 = __pyx_v_walker_pos;
  }
  __pyx_L16:;
 2420: 
+2421:         if sampler is None:
  __pyx_t_3 = (__pyx_v_sampler == Py_None);
  __pyx_t_6 = (__pyx_t_3 != 0);
  if (__pyx_t_6) {
/* … */
    goto __pyx_L17;
  }
 2422:             # Start a new MCMC chain.
+2423:             if nprocesses > 1:
    __pyx_t_1 = PyObject_RichCompare(__pyx_v_nprocesses, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2423, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 2423, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_6) {
/* … */
      goto __pyx_L18;
    }
+2424:                 mcmc_pool = pathos_mp.ProcessingPool(nprocesses)
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_pathos_mp); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2424, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_ProcessingPool); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2424, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
        __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_13);
        if (likely(__pyx_t_9)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_13, function);
        }
      }
      __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_9, __pyx_v_nprocesses) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_v_nprocesses);
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2424, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __pyx_v_mcmc_pool = __pyx_t_1;
      __pyx_t_1 = 0;
+2425:                 sampler = emcee.EnsembleSampler(nwalkers, ndim, self._logposterior_latent,
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_emcee); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2425, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_EnsembleSampler); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2425, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_logposterior_latent); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2425, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2425, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_v_nwalkers);
      __Pyx_GIVEREF(__pyx_v_nwalkers);
      PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_nwalkers);
      __Pyx_INCREF(__pyx_v_ndim);
      __Pyx_GIVEREF(__pyx_v_ndim);
      PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_ndim);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_1);
      __pyx_t_1 = 0;
/* … */
      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2425, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF_SET(__pyx_v_sampler, __pyx_t_11);
      __pyx_t_11 = 0;
+2426:                                                 kwargs=logpost_args, pool=mcmc_pool)
      __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2426, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_kwargs, __pyx_v_logpost_args) < 0) __PYX_ERR(0, 2426, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_pool, __pyx_v_mcmc_pool) < 0) __PYX_ERR(0, 2426, __pyx_L1_error)
 2427:             else:
+2428:                 sampler = emcee.EnsembleSampler(nwalkers, ndim, self._logposterior_latent,
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_emcee); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2428, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_EnsembleSampler); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2428, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_logposterior_latent); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2428, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2428, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_v_nwalkers);
      __Pyx_GIVEREF(__pyx_v_nwalkers);
      PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_nwalkers);
      __Pyx_INCREF(__pyx_v_ndim);
      __Pyx_GIVEREF(__pyx_v_ndim);
      PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_ndim);
      __Pyx_GIVEREF(__pyx_t_11);
      PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_11);
      __pyx_t_11 = 0;
/* … */
      __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, __pyx_t_11); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2428, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF_SET(__pyx_v_sampler, __pyx_t_13);
      __pyx_t_13 = 0;
    }
    __pyx_L18:;
+2429:                                                 kwargs=logpost_args)
      __pyx_t_11 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2429, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_kwargs, __pyx_v_logpost_args) < 0) __PYX_ERR(0, 2429, __pyx_L1_error)
 2430: 
+2431:             sampler.run_mcmc(p0, nsamples, progress=verbose)
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_run_mcmc); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2431, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2431, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_v_p0);
    __Pyx_GIVEREF(__pyx_v_p0);
    PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_p0);
    __Pyx_INCREF(__pyx_v_nsamples);
    __Pyx_GIVEREF(__pyx_v_nsamples);
    PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_nsamples);
    __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2431, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_progress, __pyx_v_verbose) < 0) __PYX_ERR(0, 2431, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_11, __pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2431, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2432:         else:
 2433:             # Continue running an existing MCMC chain.
+2434:             if nprocesses > 1:
  /*else*/ {
    __pyx_t_1 = PyObject_RichCompare(__pyx_v_nprocesses, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2434, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 2434, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_6) {
/* … */
      goto __pyx_L19;
    }
 2435:                 # Restart the pool we closed at the end of the previous run.
+2436:                 sampler.pool = pathos_mp.ProcessingPool(nprocesses)
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_pathos_mp); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2436, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_ProcessingPool); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2436, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_9)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
        }
      }
      __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_9, __pyx_v_nprocesses) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_nprocesses);
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2436, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_sampler, __pyx_n_s_pool, __pyx_t_1) < 0) __PYX_ERR(0, 2436, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2437:             elif sampler.pool is not None:
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = (__pyx_t_1 != Py_None);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = (__pyx_t_6 != 0);
    if (__pyx_t_3) {
/* … */
    }
    __pyx_L19:;
 2438:                 # If the user decided to not have multiprocessing in a subsequent run, we need
 2439:                 # to reset the pool in the emcee.EnsembleSampler.
+2440:                 sampler.pool = None
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_sampler, __pyx_n_s_pool, Py_None) < 0) __PYX_ERR(0, 2440, __pyx_L1_error)
 2441: 
+2442:             sampler.run_mcmc(None, nsamples, progress=verbose)
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_run_mcmc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2442, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2442, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    PyTuple_SET_ITEM(__pyx_t_11, 0, Py_None);
    __Pyx_INCREF(__pyx_v_nsamples);
    __Pyx_GIVEREF(__pyx_v_nsamples);
    PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_nsamples);
    __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2442, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_progress, __pyx_v_verbose) < 0) __PYX_ERR(0, 2442, __pyx_L1_error)
    __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, __pyx_t_9); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2442, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  }
  __pyx_L17:;
 2443: 
+2444:         if sampler.pool is not None:
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_3 = (__pyx_t_13 != Py_None);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_6 = (__pyx_t_3 != 0);
  if (__pyx_t_6) {
/* … */
  }
+2445:             sampler.pool.close()
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2445, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_close); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2445, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
      }
    }
    __pyx_t_13 = (__pyx_t_9) ? __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9) : __Pyx_PyObject_CallNoArg(__pyx_t_11);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2445, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+2446:             sampler.pool.join()
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_join); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
      }
    }
    __pyx_t_13 = (__pyx_t_11) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_11) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+2447:             sampler.pool.clear()
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_pool); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2447, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_clear); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2447, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
      }
    }
    __pyx_t_13 = (__pyx_t_9) ? __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_9) : __Pyx_PyObject_CallNoArg(__pyx_t_11);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2447, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 2448: 
+2449:         return sampler
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_sampler);
  __pyx_r = __pyx_v_sampler;
  goto __pyx_L0;
 2450: 
+2451:     def latent_infer_mcmc_process_result(self, sampler, obs, fltr, param_priors, init_priors, contactMatrix=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_81latent_infer_mcmc_process_result(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_80latent_infer_mcmc_process_result[] = "\n        Take the sampler generated by `pyross.inference.latent_infer_mcmc` and produce output dictionaries for\n        further use in the pyross framework.\n\n        Parameters\n        ----------\n        sampler: emcee.EnsembleSampler\n            Output of `mcmc_latent_inference`.\n        obs: 2d numpy.array\n        fltr: 2d numpy.array\n        param_priors: dict\n        init_priors: dict\n        contactMatrix: callable, optional\n        generator: pyross.contactMatrix, optional\n        intervention_fun: callable, optional\n        flat: bool, optional\n            This decides whether to return the samples as for each chain separately (False) or as as a combined\n            list (True). Default is True.\n        discard: int, optional\n            The number of initial samples to discard in each chain (to account for burn-in). Default is 0.\n        thin: int, optional\n            Thin out the chain by taking only the n-tn element in each chain. Default is 1 (no thinning).\n        **catchall_kwargs: dict\n            Catches further provided arguments and ignores them.\n\n        Returns\n        -------\n        output_samples: list of dict (if flat=True), or list of list of dict (if flat=False)\n            The processed posterior samples.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_81latent_infer_mcmc_process_result(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sampler = 0;
  PyObject *__pyx_v_obs = 0;
  PyObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_param_priors = 0;
  PyObject *__pyx_v_init_priors = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_flat = 0;
  PyObject *__pyx_v_discard = 0;
  PyObject *__pyx_v_thin = 0;
  CYTHON_UNUSED PyObject *__pyx_v_catchall_kwargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_infer_mcmc_process_result (wrapper)", 0);
  __pyx_v_catchall_kwargs = PyDict_New(); if (unlikely(!__pyx_v_catchall_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_catchall_kwargs);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sampler,&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_param_priors,&__pyx_n_s_init_priors,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_flat,&__pyx_n_s_discard,&__pyx_n_s_thin,0};
    PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0};
    values[5] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_XDECREF(__pyx_v_catchall_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_80latent_infer_mcmc_process_result(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_sampler, PyObject *__pyx_v_obs, PyObject *__pyx_v_fltr, PyObject *__pyx_v_param_priors, PyObject *__pyx_v_init_priors, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_flat, PyObject *__pyx_v_discard, PyObject *__pyx_v_thin, CYTHON_UNUSED PyObject *__pyx_v_catchall_kwargs) {
  PyObject *__pyx_v_obs0 = NULL;
  PyObject *__pyx_v_param_prior_names = NULL;
  PyObject *__pyx_v_keys = NULL;
  PyObject *__pyx_v_param_guess = NULL;
  PyObject *__pyx_v_param_stds = NULL;
  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
  PyObject *__pyx_v_param_bounds = NULL;
  PyObject *__pyx_v_param_guess_range = NULL;
  PyObject *__pyx_v_is_scale_parameter = NULL;
  PyObject *__pyx_v_scaled_param_guesses = NULL;
  PyObject *__pyx_v_init_prior_names = NULL;
  PyObject *__pyx_v_init_guess = NULL;
  PyObject *__pyx_v_init_stds = NULL;
  PyObject *__pyx_v_init_bounds = NULL;
  PyObject *__pyx_v_init_flags = NULL;
  PyObject *__pyx_v_init_fltrs = NULL;
  PyObject *__pyx_v_param_length = NULL;
  PyObject *__pyx_v_guess = NULL;
  PyObject *__pyx_v_stds = NULL;
  PyObject *__pyx_v_bounds = NULL;
  PyObject *__pyx_v_prior = NULL;
  PyObject *__pyx_v_samples = NULL;
  PyObject *__pyx_v_log_posts = NULL;
  PyObject *__pyx_v_samples_per_chain = NULL;
  PyObject *__pyx_v_nr_chains = NULL;
  PyObject *__pyx_v_output_samples = NULL;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_j = NULL;
  PyObject *__pyx_v_sample = NULL;
  PyObject *__pyx_v_l_post = NULL;
  PyObject *__pyx_v_weight = NULL;
  PyObject *__pyx_v_param_sample = NULL;
  PyObject *__pyx_v_orig_params = NULL;
  PyObject *__pyx_v_init_sample = NULL;
  PyObject *__pyx_v_sample_params_dict = NULL;
  PyObject *__pyx_v_sample_control_params_dict = NULL;
  PyObject *__pyx_v_sample_x0 = NULL;
  PyObject *__pyx_v_l_prior = NULL;
  PyObject *__pyx_v_l_like = NULL;
  PyObject *__pyx_v_output_dict = NULL;
  CYTHON_UNUSED PyObject *__pyx_8genexpr3__pyx_v__ = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_infer_mcmc_process_result", 0);
  __Pyx_INCREF(__pyx_v_obs);
  __Pyx_INCREF(__pyx_v_fltr);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_infer_mcmc_process_result", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_obs0);
  __Pyx_XDECREF(__pyx_v_param_prior_names);
  __Pyx_XDECREF(__pyx_v_keys);
  __Pyx_XDECREF(__pyx_v_param_guess);
  __Pyx_XDECREF(__pyx_v_param_stds);
  __Pyx_XDECREF(__pyx_v__);
  __Pyx_XDECREF(__pyx_v_param_bounds);
  __Pyx_XDECREF(__pyx_v_param_guess_range);
  __Pyx_XDECREF(__pyx_v_is_scale_parameter);
  __Pyx_XDECREF(__pyx_v_scaled_param_guesses);
  __Pyx_XDECREF(__pyx_v_init_prior_names);
  __Pyx_XDECREF(__pyx_v_init_guess);
  __Pyx_XDECREF(__pyx_v_init_stds);
  __Pyx_XDECREF(__pyx_v_init_bounds);
  __Pyx_XDECREF(__pyx_v_init_flags);
  __Pyx_XDECREF(__pyx_v_init_fltrs);
  __Pyx_XDECREF(__pyx_v_param_length);
  __Pyx_XDECREF(__pyx_v_guess);
  __Pyx_XDECREF(__pyx_v_stds);
  __Pyx_XDECREF(__pyx_v_bounds);
  __Pyx_XDECREF(__pyx_v_prior);
  __Pyx_XDECREF(__pyx_v_samples);
  __Pyx_XDECREF(__pyx_v_log_posts);
  __Pyx_XDECREF(__pyx_v_samples_per_chain);
  __Pyx_XDECREF(__pyx_v_nr_chains);
  __Pyx_XDECREF(__pyx_v_output_samples);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_j);
  __Pyx_XDECREF(__pyx_v_sample);
  __Pyx_XDECREF(__pyx_v_l_post);
  __Pyx_XDECREF(__pyx_v_weight);
  __Pyx_XDECREF(__pyx_v_param_sample);
  __Pyx_XDECREF(__pyx_v_orig_params);
  __Pyx_XDECREF(__pyx_v_init_sample);
  __Pyx_XDECREF(__pyx_v_sample_params_dict);
  __Pyx_XDECREF(__pyx_v_sample_control_params_dict);
  __Pyx_XDECREF(__pyx_v_sample_x0);
  __Pyx_XDECREF(__pyx_v_l_prior);
  __Pyx_XDECREF(__pyx_v_l_like);
  __Pyx_XDECREF(__pyx_v_output_dict);
  __Pyx_XDECREF(__pyx_8genexpr3__pyx_v__);
  __Pyx_XDECREF(__pyx_v_obs);
  __Pyx_XDECREF(__pyx_v_fltr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2452:                                          generator=None, intervention_fun=None, flat=True, discard=0, thin=1,
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)Py_True);
    values[9] = ((PyObject *)__pyx_int_0);
    values[10] = ((PyObject *)__pyx_int_1);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sampler)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_mcmc_process_result", 0, 5, 11, 1); __PYX_ERR(0, 2451, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_mcmc_process_result", 0, 5, 11, 2); __PYX_ERR(0, 2451, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_mcmc_process_result", 0, 5, 11, 3); __PYX_ERR(0, 2451, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_priors)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_infer_mcmc_process_result", 0, 5, 11, 4); __PYX_ERR(0, 2451, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flat);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_discard);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_thin);
          if (value) { values[10] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_catchall_kwargs, values, pos_args, "latent_infer_mcmc_process_result") < 0)) __PYX_ERR(0, 2451, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sampler = values[0];
    __pyx_v_obs = values[1];
    __pyx_v_fltr = values[2];
    __pyx_v_param_priors = values[3];
    __pyx_v_init_priors = values[4];
    __pyx_v_contactMatrix = values[5];
    __pyx_v_generator = values[6];
    __pyx_v_intervention_fun = values[7];
    __pyx_v_flat = values[8];
    __pyx_v_discard = values[9];
    __pyx_v_thin = values[10];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("latent_infer_mcmc_process_result", 0, 5, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2451, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_catchall_kwargs); __pyx_v_catchall_kwargs = 0;
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_infer_mcmc_process_result", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_80latent_infer_mcmc_process_result(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_sampler, __pyx_v_obs, __pyx_v_fltr, __pyx_v_param_priors, __pyx_v_init_priors, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_flat, __pyx_v_discard, __pyx_v_thin, __pyx_v_catchall_kwargs);
 2453:                                          **catchall_kwargs):
 2454:         """
 2455:         Take the sampler generated by `pyross.inference.latent_infer_mcmc` and produce output dictionaries for
 2456:         further use in the pyross framework.
 2457: 
 2458:         Parameters
 2459:         ----------
 2460:         sampler: emcee.EnsembleSampler
 2461:             Output of `mcmc_latent_inference`.
 2462:         obs: 2d numpy.array
 2463:         fltr: 2d numpy.array
 2464:         param_priors: dict
 2465:         init_priors: dict
 2466:         contactMatrix: callable, optional
 2467:         generator: pyross.contactMatrix, optional
 2468:         intervention_fun: callable, optional
 2469:         flat: bool, optional
 2470:             This decides whether to return the samples as for each chain separately (False) or as as a combined
 2471:             list (True). Default is True.
 2472:         discard: int, optional
 2473:             The number of initial samples to discard in each chain (to account for burn-in). Default is 0.
 2474:         thin: int, optional
 2475:             Thin out the chain by taking only the n-tn element in each chain. Default is 1 (no thinning).
 2476:         **catchall_kwargs: dict
 2477:             Catches further provided arguments and ignores them.
 2478: 
 2479:         Returns
 2480:         -------
 2481:         output_samples: list of dict (if flat=True), or list of list of dict (if flat=False)
 2482:             The processed posterior samples.
 2483:         """
 2484:         # Sanity checks of the inputs
+2485:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2485, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2485, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2485, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2485, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_intervention_fun);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2485, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2486: 
 2487:         # Process fltr and obs
+2488:         fltr, obs, obs0 = pyross.utils.process_latent_data(fltr, obs)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2488, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2488, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_process_latent_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2488, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_fltr, __pyx_v_obs};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2488, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_fltr, __pyx_v_obs};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2488, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_3 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2488, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_v_fltr);
    __Pyx_GIVEREF(__pyx_v_fltr);
    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_4, __pyx_v_fltr);
    __Pyx_INCREF(__pyx_v_obs);
    __Pyx_GIVEREF(__pyx_v_obs);
    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_4, __pyx_v_obs);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2488, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2488, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_5);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2488, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2488, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2488, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2488, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 2; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 3) < 0) __PYX_ERR(0, 2488, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2488, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __Pyx_DECREF_SET(__pyx_v_fltr, __pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_obs, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_v_obs0 = __pyx_t_5;
  __pyx_t_5 = 0;
 2489: 
 2490:         # Read in parameter priors
+2491:         param_prior_names, keys, param_guess, param_stds, _, _, param_bounds, param_guess_range, \
  __pyx_v_param_prior_names = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_keys = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_param_guess = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_param_stds = __pyx_t_6;
  __pyx_t_6 = 0;
  __pyx_v__ = __pyx_t_8;
  __pyx_t_8 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_9);
  __pyx_t_9 = 0;
  __pyx_v_param_bounds = __pyx_t_10;
  __pyx_t_10 = 0;
  __pyx_v_param_guess_range = __pyx_t_11;
  __pyx_t_11 = 0;
  __pyx_v_is_scale_parameter = __pyx_t_12;
  __pyx_t_12 = 0;
  __pyx_v_scaled_param_guesses = __pyx_t_13;
  __pyx_t_13 = 0;
 2492:         is_scale_parameter, scaled_param_guesses \
+2493:             = pyross.utils.parse_param_prior_dict(param_priors, self.M, check_length=(not self.param_mapping_enabled))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyross); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_parse_param_prior_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_self->M); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_param_priors);
  __Pyx_GIVEREF(__pyx_v_param_priors);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_param_priors);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyBool_FromLong((!(__pyx_v_self->param_mapping_enabled != 0))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_check_length, __pyx_t_2) < 0) __PYX_ERR(0, 2493, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 10)) {
      if (size > 10) __Pyx_RaiseTooManyValuesError(10);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2491, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 5); 
      __pyx_t_10 = PyTuple_GET_ITEM(sequence, 6); 
      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 7); 
      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 8); 
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 9); 
    } else {
      __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 5); 
      __pyx_t_10 = PyList_GET_ITEM(sequence, 6); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 7); 
      __pyx_t_12 = PyList_GET_ITEM(sequence, 8); 
      __pyx_t_13 = PyList_GET_ITEM(sequence, 9); 
    }
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_t_12);
    __Pyx_INCREF(__pyx_t_13);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[10] = {&__pyx_t_5,&__pyx_t_3,&__pyx_t_1,&__pyx_t_6,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12,&__pyx_t_13};
      for (i=0; i < 10; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 2491, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[10] = {&__pyx_t_5,&__pyx_t_3,&__pyx_t_1,&__pyx_t_6,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12,&__pyx_t_13};
    __pyx_t_14 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2491, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_14)->tp_iternext;
    for (index=0; index < 10; index++) {
      PyObject* item = __pyx_t_7(__pyx_t_14); if (unlikely(!item)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_14), 10) < 0) __PYX_ERR(0, 2491, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2491, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
 2494: 
 2495:         # Read in initial conditions priors
+2496:         init_prior_names, init_guess, init_stds, _, _,init_bounds, init_flags, init_fltrs \
  __pyx_v_init_prior_names = __pyx_t_13;
  __pyx_t_13 = 0;
  __pyx_v_init_guess = __pyx_t_9;
  __pyx_t_9 = 0;
  __pyx_v_init_stds = __pyx_t_11;
  __pyx_t_11 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_12);
  __pyx_t_12 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_10);
  __pyx_t_10 = 0;
  __pyx_v_init_bounds = __pyx_t_8;
  __pyx_t_8 = 0;
  __pyx_v_init_flags = __pyx_t_6;
  __pyx_t_6 = 0;
  __pyx_v_init_fltrs = __pyx_t_1;
  __pyx_t_1 = 0;
+2497:             = pyross.utils.parse_init_prior_dict(init_priors, self.dim, len(obs0))
  __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_pyross); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_utils); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_parse_init_prior_dict); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_15 = PyObject_Length(__pyx_v_obs0); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2497, __pyx_L1_error)
  __pyx_t_11 = PyInt_FromSsize_t(__pyx_t_15); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_10 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_13);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_13, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_13)) {
    PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_v_init_priors, __pyx_t_12, __pyx_t_11};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2497, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_13)) {
    PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_v_init_priors, __pyx_t_12, __pyx_t_11};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2497, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2497, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_10) {
      __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_10); __pyx_t_10 = NULL;
    }
    __Pyx_INCREF(__pyx_v_init_priors);
    __Pyx_GIVEREF(__pyx_v_init_priors);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_4, __pyx_v_init_priors);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_4, __pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_4, __pyx_t_11);
    __pyx_t_12 = 0;
    __pyx_t_11 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2497, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 8)) {
      if (size > 8) __Pyx_RaiseTooManyValuesError(8);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2496, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_10 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 5); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 6); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 7); 
    } else {
      __pyx_t_13 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_12 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_10 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 5); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 6); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 7); 
    }
    __Pyx_INCREF(__pyx_t_13);
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_t_12);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_1);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[8] = {&__pyx_t_13,&__pyx_t_9,&__pyx_t_11,&__pyx_t_12,&__pyx_t_10,&__pyx_t_8,&__pyx_t_6,&__pyx_t_1};
      for (i=0; i < 8; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 2496, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[8] = {&__pyx_t_13,&__pyx_t_9,&__pyx_t_11,&__pyx_t_12,&__pyx_t_10,&__pyx_t_8,&__pyx_t_6,&__pyx_t_1};
    __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2496, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext;
    for (index=0; index < 8; index++) {
      PyObject* item = __pyx_t_7(__pyx_t_3); if (unlikely(!item)) goto __pyx_L7_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_3), 8) < 0) __PYX_ERR(0, 2496, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_unpacking_done;
    __pyx_L7_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2496, __pyx_L1_error)
    __pyx_L8_unpacking_done:;
  }
 2498: 
 2499:         # Concatenate the flattend parameter guess with init guess
+2500:         param_length = param_guess.shape[0]
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_param_guess, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2500, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2500, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_param_length = __pyx_t_1;
  __pyx_t_1 = 0;
+2501:         guess = np.concatenate([param_guess, init_guess]).astype(DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_v_param_guess);
  __Pyx_GIVEREF(__pyx_v_param_guess);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_v_param_guess);
  __Pyx_INCREF(__pyx_v_init_guess);
  __Pyx_GIVEREF(__pyx_v_init_guess);
  PyList_SET_ITEM(__pyx_t_6, 1, __pyx_v_init_guess);
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  __pyx_t_2 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_10, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_astype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_6, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2501, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_guess = __pyx_t_1;
  __pyx_t_1 = 0;
+2502:         stds = np.concatenate([param_stds,init_stds]).astype(DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2502, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2502, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2502, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_param_stds);
  __Pyx_GIVEREF(__pyx_v_param_stds);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_v_param_stds);
  __Pyx_INCREF(__pyx_v_init_stds);
  __Pyx_GIVEREF(__pyx_v_init_stds);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_v_init_stds);
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_10, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2502, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_astype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2502, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2502, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_8);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2502, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_stds = __pyx_t_1;
  __pyx_t_1 = 0;
+2503:         bounds = np.concatenate([param_bounds, init_bounds], axis=0).astype(DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_v_param_bounds);
  __Pyx_GIVEREF(__pyx_v_param_bounds);
  PyList_SET_ITEM(__pyx_t_6, 0, __pyx_v_param_bounds);
  __Pyx_INCREF(__pyx_v_init_bounds);
  __Pyx_GIVEREF(__pyx_v_init_bounds);
  PyList_SET_ITEM(__pyx_t_6, 1, __pyx_v_init_bounds);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 2503, __pyx_L1_error)
  __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_astype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_10);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_bounds = __pyx_t_1;
  __pyx_t_1 = 0;
 2504: 
+2505:         prior = Prior(param_prior_names+init_prior_names, bounds, guess, stds)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Prior); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_10 = PyNumber_Add(__pyx_v_param_prior_names, __pyx_v_init_prior_names); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[5] = {__pyx_t_2, __pyx_t_10, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2505, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[5] = {__pyx_t_2, __pyx_t_10, __pyx_v_bounds, __pyx_v_guess, __pyx_v_stds};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2505, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2505, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_4, __pyx_t_10);
    __Pyx_INCREF(__pyx_v_bounds);
    __Pyx_GIVEREF(__pyx_v_bounds);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_4, __pyx_v_bounds);
    __Pyx_INCREF(__pyx_v_guess);
    __Pyx_GIVEREF(__pyx_v_guess);
    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_4, __pyx_v_guess);
    __Pyx_INCREF(__pyx_v_stds);
    __Pyx_GIVEREF(__pyx_v_stds);
    PyTuple_SET_ITEM(__pyx_t_8, 3+__pyx_t_4, __pyx_v_stds);
    __pyx_t_10 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2505, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_prior = __pyx_t_1;
  __pyx_t_1 = 0;
 2506: 
+2507:         samples = sampler.get_chain(flat=flat, thin=thin, discard=discard)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_get_chain); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_flat, __pyx_v_flat) < 0) __PYX_ERR(0, 2507, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_thin, __pyx_v_thin) < 0) __PYX_ERR(0, 2507, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_discard, __pyx_v_discard) < 0) __PYX_ERR(0, 2507, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_samples = __pyx_t_8;
  __pyx_t_8 = 0;
+2508:         log_posts = sampler.get_log_prob(flat=flat, thin=thin, discard=discard)
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_sampler, __pyx_n_s_get_log_prob); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_6 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_flat, __pyx_v_flat) < 0) __PYX_ERR(0, 2508, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_thin, __pyx_v_thin) < 0) __PYX_ERR(0, 2508, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_discard, __pyx_v_discard) < 0) __PYX_ERR(0, 2508, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_log_posts = __pyx_t_1;
  __pyx_t_1 = 0;
+2509:         samples_per_chain = samples.shape[0]
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_samples, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_samples_per_chain = __pyx_t_6;
  __pyx_t_6 = 0;
+2510:         nr_chains = 1 if flat else samples.shape[1]
  __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_v_flat); if (unlikely(__pyx_t_16 < 0)) __PYX_ERR(0, 2510, __pyx_L1_error)
  if (__pyx_t_16) {
    __Pyx_INCREF(__pyx_int_1);
    __pyx_t_6 = __pyx_int_1;
  } else {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_samples, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2510, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2510, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = __pyx_t_8;
    __pyx_t_8 = 0;
  }
  __pyx_v_nr_chains = __pyx_t_6;
  __pyx_t_6 = 0;
+2511:         if flat:
  __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_v_flat); if (unlikely(__pyx_t_16 < 0)) __PYX_ERR(0, 2511, __pyx_L1_error)
  if (__pyx_t_16) {
/* … */
    goto __pyx_L9;
  }
+2512:             output_samples = []
    __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2512, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_v_output_samples = ((PyObject*)__pyx_t_6);
    __pyx_t_6 = 0;
 2513:         else:
+2514:             output_samples = [[] for _ in nr_chains]
  /*else*/ {
    { /* enter inner scope */
      __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2514, __pyx_L12_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (likely(PyList_CheckExact(__pyx_v_nr_chains)) || PyTuple_CheckExact(__pyx_v_nr_chains)) {
        __pyx_t_8 = __pyx_v_nr_chains; __Pyx_INCREF(__pyx_t_8); __pyx_t_15 = 0;
        __pyx_t_17 = NULL;
      } else {
        __pyx_t_15 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_v_nr_chains); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2514, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_17 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2514, __pyx_L12_error)
      }
      for (;;) {
        if (likely(!__pyx_t_17)) {
          if (likely(PyList_CheckExact(__pyx_t_8))) {
            if (__pyx_t_15 >= PyList_GET_SIZE(__pyx_t_8)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_1 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_15); __Pyx_INCREF(__pyx_t_1); __pyx_t_15++; if (unlikely(0 < 0)) __PYX_ERR(0, 2514, __pyx_L12_error)
            #else
            __pyx_t_1 = PySequence_ITEM(__pyx_t_8, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2514, __pyx_L12_error)
            __Pyx_GOTREF(__pyx_t_1);
            #endif
          } else {
            if (__pyx_t_15 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_15); __Pyx_INCREF(__pyx_t_1); __pyx_t_15++; if (unlikely(0 < 0)) __PYX_ERR(0, 2514, __pyx_L12_error)
            #else
            __pyx_t_1 = PySequence_ITEM(__pyx_t_8, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2514, __pyx_L12_error)
            __Pyx_GOTREF(__pyx_t_1);
            #endif
          }
        } else {
          __pyx_t_1 = __pyx_t_17(__pyx_t_8);
          if (unlikely(!__pyx_t_1)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 2514, __pyx_L12_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_XDECREF_SET(__pyx_8genexpr3__pyx_v__, __pyx_t_1);
        __pyx_t_1 = 0;
        __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2514, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_6, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 2514, __pyx_L12_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_8genexpr3__pyx_v__); __pyx_8genexpr3__pyx_v__ = 0;
      goto __pyx_L15_exit_scope;
      __pyx_L12_error:;
      __Pyx_XDECREF(__pyx_8genexpr3__pyx_v__); __pyx_8genexpr3__pyx_v__ = 0;
      goto __pyx_L1_error;
      __pyx_L15_exit_scope:;
    } /* exit inner scope */
    __pyx_v_output_samples = ((PyObject*)__pyx_t_6);
    __pyx_t_6 = 0;
  }
  __pyx_L9:;
 2515: 
+2516:         for i in range(samples_per_chain):
  __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_v_samples_per_chain); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2516, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (likely(PyList_CheckExact(__pyx_t_6)) || PyTuple_CheckExact(__pyx_t_6)) {
    __pyx_t_8 = __pyx_t_6; __Pyx_INCREF(__pyx_t_8); __pyx_t_15 = 0;
    __pyx_t_17 = NULL;
  } else {
    __pyx_t_15 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2516, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_17 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 2516, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  for (;;) {
    if (likely(!__pyx_t_17)) {
      if (likely(PyList_CheckExact(__pyx_t_8))) {
        if (__pyx_t_15 >= PyList_GET_SIZE(__pyx_t_8)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_15); __Pyx_INCREF(__pyx_t_6); __pyx_t_15++; if (unlikely(0 < 0)) __PYX_ERR(0, 2516, __pyx_L1_error)
        #else
        __pyx_t_6 = PySequence_ITEM(__pyx_t_8, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2516, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        #endif
      } else {
        if (__pyx_t_15 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_15); __Pyx_INCREF(__pyx_t_6); __pyx_t_15++; if (unlikely(0 < 0)) __PYX_ERR(0, 2516, __pyx_L1_error)
        #else
        __pyx_t_6 = PySequence_ITEM(__pyx_t_8, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2516, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        #endif
      }
    } else {
      __pyx_t_6 = __pyx_t_17(__pyx_t_8);
      if (unlikely(!__pyx_t_6)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 2516, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_6);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_6);
    __pyx_t_6 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+2517:             for j in range(nr_chains):
    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_v_nr_chains); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2517, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (likely(PyList_CheckExact(__pyx_t_6)) || PyTuple_CheckExact(__pyx_t_6)) {
      __pyx_t_1 = __pyx_t_6; __Pyx_INCREF(__pyx_t_1); __pyx_t_18 = 0;
      __pyx_t_19 = NULL;
    } else {
      __pyx_t_18 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2517, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_19 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 2517, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    for (;;) {
      if (likely(!__pyx_t_19)) {
        if (likely(PyList_CheckExact(__pyx_t_1))) {
          if (__pyx_t_18 >= PyList_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_18); __Pyx_INCREF(__pyx_t_6); __pyx_t_18++; if (unlikely(0 < 0)) __PYX_ERR(0, 2517, __pyx_L1_error)
          #else
          __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2517, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          #endif
        } else {
          if (__pyx_t_18 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_18); __Pyx_INCREF(__pyx_t_6); __pyx_t_18++; if (unlikely(0 < 0)) __PYX_ERR(0, 2517, __pyx_L1_error)
          #else
          __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2517, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          #endif
        }
      } else {
        __pyx_t_6 = __pyx_t_19(__pyx_t_1);
        if (unlikely(!__pyx_t_6)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 2517, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_6);
      }
      __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_6);
      __pyx_t_6 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2518:                 if flat:
      __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_v_flat); if (unlikely(__pyx_t_16 < 0)) __PYX_ERR(0, 2518, __pyx_L1_error)
      if (__pyx_t_16) {
/* … */
        goto __pyx_L20;
      }
+2519:                     sample = samples[i,:]
        __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2519, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_v_i);
        __Pyx_GIVEREF(__pyx_v_i);
        PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_i);
        __Pyx_INCREF(__pyx_slice_);
        __Pyx_GIVEREF(__pyx_slice_);
        PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_slice_);
        __pyx_t_10 = __Pyx_PyObject_GetItem(__pyx_v_samples, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2519, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF_SET(__pyx_v_sample, __pyx_t_10);
        __pyx_t_10 = 0;
+2520:                     l_post = log_posts[i]
        __pyx_t_10 = __Pyx_PyObject_GetItem(__pyx_v_log_posts, __pyx_v_i); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2520, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_XDECREF_SET(__pyx_v_l_post, __pyx_t_10);
        __pyx_t_10 = 0;
 2521:                 else:
+2522:                     sample = samples[i, j, :]
      /*else*/ {
        __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2522, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_INCREF(__pyx_v_i);
        __Pyx_GIVEREF(__pyx_v_i);
        PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_i);
        __Pyx_INCREF(__pyx_v_j);
        __Pyx_GIVEREF(__pyx_v_j);
        PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_j);
        __Pyx_INCREF(__pyx_slice_);
        __Pyx_GIVEREF(__pyx_slice_);
        PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_slice_);
        __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_samples, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2522, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF_SET(__pyx_v_sample, __pyx_t_6);
        __pyx_t_6 = 0;
+2523:                     l_post = log_posts[i]
        __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_log_posts, __pyx_v_i); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2523, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_XDECREF_SET(__pyx_v_l_post, __pyx_t_6);
        __pyx_t_6 = 0;
      }
      __pyx_L20:;
+2524:                 weight = 1.0 / (samples_per_chain * nr_chains)
      __pyx_t_6 = PyNumber_Multiply(__pyx_v_samples_per_chain, __pyx_v_nr_chains); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2524, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_10 = __Pyx_PyFloat_TrueDivideCObj(__pyx_float_1_0, __pyx_t_6, 1.0, 0, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2524, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF_SET(__pyx_v_weight, __pyx_t_10);
      __pyx_t_10 = 0;
+2525:                 param_sample = sample[:param_length]
      __pyx_t_10 = __Pyx_PyObject_GetSlice(__pyx_v_sample, 0, 0, NULL, &__pyx_v_param_length, NULL, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2525, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_XDECREF_SET(__pyx_v_param_sample, __pyx_t_10);
      __pyx_t_10 = 0;
+2526:                 orig_params = pyross.utils.unflatten_parameters(param_sample, param_guess_range,
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyross); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2526, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_utils); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2526, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unflatten_parameters); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2526, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+2527:                                                                 is_scale_parameter, scaled_param_guesses)
      __pyx_t_2 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
          __pyx_t_4 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_6)) {
        PyObject *__pyx_temp[5] = {__pyx_t_2, __pyx_v_param_sample, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses};
        __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2526, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_GOTREF(__pyx_t_10);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
        PyObject *__pyx_temp[5] = {__pyx_t_2, __pyx_v_param_sample, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses};
        __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2526, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_GOTREF(__pyx_t_10);
      } else
      #endif
      {
        __pyx_t_12 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2526, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        if (__pyx_t_2) {
          __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_2); __pyx_t_2 = NULL;
        }
        __Pyx_INCREF(__pyx_v_param_sample);
        __Pyx_GIVEREF(__pyx_v_param_sample);
        PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_4, __pyx_v_param_sample);
        __Pyx_INCREF(__pyx_v_param_guess_range);
        __Pyx_GIVEREF(__pyx_v_param_guess_range);
        PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_4, __pyx_v_param_guess_range);
        __Pyx_INCREF(__pyx_v_is_scale_parameter);
        __Pyx_GIVEREF(__pyx_v_is_scale_parameter);
        PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_4, __pyx_v_is_scale_parameter);
        __Pyx_INCREF(__pyx_v_scaled_param_guesses);
        __Pyx_GIVEREF(__pyx_v_scaled_param_guesses);
        PyTuple_SET_ITEM(__pyx_t_12, 3+__pyx_t_4, __pyx_v_scaled_param_guesses);
        __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_12, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2526, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF_SET(__pyx_v_orig_params, __pyx_t_10);
      __pyx_t_10 = 0;
+2528:                 init_sample = sample[param_length:]
      __pyx_t_10 = __Pyx_PyObject_GetSlice(__pyx_v_sample, 0, 0, &__pyx_v_param_length, NULL, NULL, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2528, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_XDECREF_SET(__pyx_v_init_sample, __pyx_t_10);
      __pyx_t_10 = 0;
 2529: 
+2530:                 sample_params_dict, sample_control_params_dict = self.fill_params_dict(keys, orig_params, return_additional_params=True)
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_fill_params_dict); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2530, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2530, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_v_keys);
      __Pyx_GIVEREF(__pyx_v_keys);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_keys);
      __Pyx_INCREF(__pyx_v_orig_params);
      __Pyx_GIVEREF(__pyx_v_orig_params);
      PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_orig_params);
      __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2530, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_return_additional_params, Py_True) < 0) __PYX_ERR(0, 2530, __pyx_L1_error)
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_6, __pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2530, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
        PyObject* sequence = __pyx_t_2;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 2530, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_12 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_12 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_6);
        #else
        __pyx_t_12 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2530, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2530, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        #endif
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_10 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2530, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_7 = Py_TYPE(__pyx_t_10)->tp_iternext;
        index = 0; __pyx_t_12 = __pyx_t_7(__pyx_t_10); if (unlikely(!__pyx_t_12)) goto __pyx_L21_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_12);
        index = 1; __pyx_t_6 = __pyx_t_7(__pyx_t_10); if (unlikely(!__pyx_t_6)) goto __pyx_L21_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_6);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_10), 2) < 0) __PYX_ERR(0, 2530, __pyx_L1_error)
        __pyx_t_7 = NULL;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        goto __pyx_L22_unpacking_done;
        __pyx_L21_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_7 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 2530, __pyx_L1_error)
        __pyx_L22_unpacking_done:;
      }
      __Pyx_XDECREF_SET(__pyx_v_sample_params_dict, __pyx_t_12);
      __pyx_t_12 = 0;
      __Pyx_XDECREF_SET(__pyx_v_sample_control_params_dict, __pyx_t_6);
      __pyx_t_6 = 0;
+2531:                 self.set_params(sample_params_dict)
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_params); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2531, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_12 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_12)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_12);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_2 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_12, __pyx_v_sample_params_dict) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_sample_params_dict);
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2531, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 2532: 
+2533:                 if generator is not None:
      __pyx_t_16 = (__pyx_v_generator != Py_None);
      __pyx_t_20 = (__pyx_t_16 != 0);
      if (__pyx_t_20) {
/* … */
      }
+2534:                     if intervention_fun is None:
        __pyx_t_20 = (__pyx_v_intervention_fun == Py_None);
        __pyx_t_16 = (__pyx_t_20 != 0);
        if (__pyx_t_16) {
/* … */
          goto __pyx_L24;
        }
+2535:                         self.contactMatrix = generator.constant_contactMatrix(**sample_control_params_dict)
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_constant_contactMatrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2535, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (unlikely(__pyx_v_sample_control_params_dict == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
            __PYX_ERR(0, 2535, __pyx_L1_error)
          }
          if (likely(PyDict_CheckExact(__pyx_v_sample_control_params_dict))) {
            __pyx_t_6 = PyDict_Copy(__pyx_v_sample_control_params_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2535, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
          } else {
            __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_sample_control_params_dict, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2535, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
          }
          __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2535, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_GIVEREF(__pyx_t_12);
          __Pyx_GOTREF(__pyx_v_self->contactMatrix);
          __Pyx_DECREF(__pyx_v_self->contactMatrix);
          __pyx_v_self->contactMatrix = __pyx_t_12;
          __pyx_t_12 = 0;
 2536:                     else:
+2537:                         self.contactMatrix = generator.intervention_custom_temporal(intervention_fun, **sample_control_params_dict)
        /*else*/ {
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_intervention_custom_temporal); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2537, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2537, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_INCREF(__pyx_v_intervention_fun);
          __Pyx_GIVEREF(__pyx_v_intervention_fun);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_intervention_fun);
          if (unlikely(__pyx_v_sample_control_params_dict == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
            __PYX_ERR(0, 2537, __pyx_L1_error)
          }
          if (likely(PyDict_CheckExact(__pyx_v_sample_control_params_dict))) {
            __pyx_t_2 = PyDict_Copy(__pyx_v_sample_control_params_dict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2537, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
          } else {
            __pyx_t_2 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_sample_control_params_dict, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2537, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
          }
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2537, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_GIVEREF(__pyx_t_10);
          __Pyx_GOTREF(__pyx_v_self->contactMatrix);
          __Pyx_DECREF(__pyx_v_self->contactMatrix);
          __pyx_v_self->contactMatrix = __pyx_t_10;
          __pyx_t_10 = 0;
        }
        __pyx_L24:;
 2538: 
+2539:                 sample_x0 = self._construct_inits(init_sample, init_flags, init_fltrs, obs0, fltr[0])
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_construct_inits); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2539, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_fltr, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2539, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_12 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_12)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_12);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
          __pyx_t_4 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_2)) {
        PyObject *__pyx_temp[6] = {__pyx_t_12, __pyx_v_init_sample, __pyx_v_init_flags, __pyx_v_init_fltrs, __pyx_v_obs0, __pyx_t_6};
        __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2539, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
        PyObject *__pyx_temp[6] = {__pyx_t_12, __pyx_v_init_sample, __pyx_v_init_flags, __pyx_v_init_fltrs, __pyx_v_obs0, __pyx_t_6};
        __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2539, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      } else
      #endif
      {
        __pyx_t_11 = PyTuple_New(5+__pyx_t_4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2539, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        if (__pyx_t_12) {
          __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_12); __pyx_t_12 = NULL;
        }
        __Pyx_INCREF(__pyx_v_init_sample);
        __Pyx_GIVEREF(__pyx_v_init_sample);
        PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_4, __pyx_v_init_sample);
        __Pyx_INCREF(__pyx_v_init_flags);
        __Pyx_GIVEREF(__pyx_v_init_flags);
        PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_4, __pyx_v_init_flags);
        __Pyx_INCREF(__pyx_v_init_fltrs);
        __Pyx_GIVEREF(__pyx_v_init_fltrs);
        PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_4, __pyx_v_init_fltrs);
        __Pyx_INCREF(__pyx_v_obs0);
        __Pyx_GIVEREF(__pyx_v_obs0);
        PyTuple_SET_ITEM(__pyx_t_11, 3+__pyx_t_4, __pyx_v_obs0);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_11, 4+__pyx_t_4, __pyx_t_6);
        __pyx_t_6 = 0;
        __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_11, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2539, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF_SET(__pyx_v_sample_x0, __pyx_t_10);
      __pyx_t_10 = 0;
+2540:                 l_prior = np.sum(prior.logpdf(sample))
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2540, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sum); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2540, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_prior, __pyx_n_s_logpdf); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2540, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_12 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_12)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_12);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_2 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_12, __pyx_v_sample) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_sample);
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2540, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_6)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
        }
      }
      __pyx_t_10 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_6, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_2);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2540, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF_SET(__pyx_v_l_prior, __pyx_t_10);
      __pyx_t_10 = 0;
+2541:                 l_like = l_post - l_prior
      __pyx_t_10 = PyNumber_Subtract(__pyx_v_l_post, __pyx_v_l_prior); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2541, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_XDECREF_SET(__pyx_v_l_like, __pyx_t_10);
      __pyx_t_10 = 0;
 2542:                 output_dict = {
+2543:                     'params_dict':sample_params_dict, 'x0':sample_x0, 'flat_params':sample,
      __pyx_t_10 = __Pyx_PyDict_NewPresized(15); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2543, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_params_dict, __pyx_v_sample_params_dict) < 0) __PYX_ERR(0, 2543, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_x0, __pyx_v_sample_x0) < 0) __PYX_ERR(0, 2543, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_flat_params, __pyx_v_sample) < 0) __PYX_ERR(0, 2543, __pyx_L1_error)
+2544:                     'log_posterior':l_post, 'log_prior':l_prior, 'log_likelihood':l_like,
      if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_log_posterior, __pyx_v_l_post) < 0) __PYX_ERR(0, 2543, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_log_prior, __pyx_v_l_prior) < 0) __PYX_ERR(0, 2543, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_log_likelihood, __pyx_v_l_like) < 0) __PYX_ERR(0, 2543, __pyx_L1_error)
+2545:                     'weight':weight, 'param_keys': keys, 'param_guess_range': param_guess_range,
      if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_weight, __pyx_v_weight) < 0) __PYX_ERR(0, 2543, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_param_keys, __pyx_v_keys) < 0) __PYX_ERR(0, 2543, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_param_guess_range, __pyx_v_param_guess_range) < 0) __PYX_ERR(0, 2543, __pyx_L1_error)
+2546:                     'is_scale_parameter':is_scale_parameter, 'param_length':param_length,
      if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_is_scale_parameter, __pyx_v_is_scale_parameter) < 0) __PYX_ERR(0, 2543, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_param_length, __pyx_v_param_length) < 0) __PYX_ERR(0, 2543, __pyx_L1_error)
+2547:                     'scaled_param_guesses':scaled_param_guesses,
      if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_scaled_param_guesses, __pyx_v_scaled_param_guesses) < 0) __PYX_ERR(0, 2543, __pyx_L1_error)
+2548:                     'init_flags': init_flags, 'init_fltrs': init_fltrs,
      if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_init_flags, __pyx_v_init_flags) < 0) __PYX_ERR(0, 2543, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_init_fltrs, __pyx_v_init_fltrs) < 0) __PYX_ERR(0, 2543, __pyx_L1_error)
+2549:                     'prior':prior
      if (PyDict_SetItem(__pyx_t_10, __pyx_n_u_prior, __pyx_v_prior) < 0) __PYX_ERR(0, 2543, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_output_dict, ((PyObject*)__pyx_t_10));
      __pyx_t_10 = 0;
 2550:                 }
 2551: 
+2552:                 if sample_control_params_dict != {}:
      __pyx_t_10 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2552, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = PyObject_RichCompare(__pyx_v_sample_control_params_dict, __pyx_t_10, Py_NE); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2552, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_16 < 0)) __PYX_ERR(0, 2552, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (__pyx_t_16) {
/* … */
      }
+2553:                     output_dict['control_params_dict'] = sample_control_params_dict
        if (unlikely(PyDict_SetItem(__pyx_v_output_dict, __pyx_n_u_control_params_dict, __pyx_v_sample_control_params_dict) < 0)) __PYX_ERR(0, 2553, __pyx_L1_error)
 2554: 
+2555:                 if flat:
      __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_v_flat); if (unlikely(__pyx_t_16 < 0)) __PYX_ERR(0, 2555, __pyx_L1_error)
      if (__pyx_t_16) {
/* … */
        goto __pyx_L26;
      }
+2556:                     output_samples.append(output_dict)
        __pyx_t_21 = __Pyx_PyList_Append(__pyx_v_output_samples, __pyx_v_output_dict); if (unlikely(__pyx_t_21 == ((int)-1))) __PYX_ERR(0, 2556, __pyx_L1_error)
 2557:                 else:
+2558:                     output_samples[j].append(output_dict)
      /*else*/ {
        __pyx_t_11 = __Pyx_PyObject_GetItem(__pyx_v_output_samples, __pyx_v_j); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2558, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_21 = __Pyx_PyObject_Append(__pyx_t_11, __pyx_v_output_dict); if (unlikely(__pyx_t_21 == ((int)-1))) __PYX_ERR(0, 2558, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      }
      __pyx_L26:;
 2559: 
+2560:         return output_samples
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_output_samples);
  __pyx_r = __pyx_v_output_samples;
  goto __pyx_L0;
 2561: 
+2562:     def _latent_mean(self, params, contactMatrix=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_83_latent_mean(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_82_latent_mean[] = "Objective function for differentiation call in latent_FIM and latent_FIM_det.";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_83_latent_mean(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_params = 0;
  CYTHON_UNUSED PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_param_keys = 0;
  PyObject *__pyx_v_param_guess_range = 0;
  PyObject *__pyx_v_is_scale_parameter = 0;
  PyObject *__pyx_v_scaled_param_guesses = 0;
  PyObject *__pyx_v_param_length = 0;
  CYTHON_UNUSED PyObject *__pyx_v_obs = 0;
  PyObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_obs0 = 0;
  PyObject *__pyx_v_inter_steps = 0;
  PyObject *__pyx_v_init_flags = 0;
  PyObject *__pyx_v_init_fltrs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_latent_mean (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_params,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_param_keys,&__pyx_n_s_param_guess_range,&__pyx_n_s_is_scale_parameter,&__pyx_n_s_scaled_param_guesses,&__pyx_n_s_param_length,&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_obs0,&__pyx_n_s_inter_steps,&__pyx_n_s_init_flags,&__pyx_n_s_init_fltrs,0};
    PyObject* values[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[1] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_82_latent_mean(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_params, CYTHON_UNUSED PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_param_keys, PyObject *__pyx_v_param_guess_range, PyObject *__pyx_v_is_scale_parameter, PyObject *__pyx_v_scaled_param_guesses, PyObject *__pyx_v_param_length, CYTHON_UNUSED PyObject *__pyx_v_obs, PyObject *__pyx_v_fltr, PyObject *__pyx_v_Tf, PyObject *__pyx_v_obs0, PyObject *__pyx_v_inter_steps, PyObject *__pyx_v_init_flags, PyObject *__pyx_v_init_fltrs) {
  PyObject *__pyx_v_param_estimates = NULL;
  PyObject *__pyx_v_orig_params = NULL;
  PyObject *__pyx_v_init_estimates = NULL;
  PyObject *__pyx_v_map_params_dict = NULL;
  PyObject *__pyx_v_map_control_params_dict = NULL;
  PyObject *__pyx_v_fltr_ = NULL;
  PyObject *__pyx_v_Nf = NULL;
  PyObject *__pyx_v_full_fltr = NULL;
  PyObject *__pyx_v_x0 = NULL;
  PyObject *__pyx_v_xm = NULL;
  PyObject *__pyx_v_xm_red = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_latent_mean", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pyross.inference.SIR_type._latent_mean", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_param_estimates);
  __Pyx_XDECREF(__pyx_v_orig_params);
  __Pyx_XDECREF(__pyx_v_init_estimates);
  __Pyx_XDECREF(__pyx_v_map_params_dict);
  __Pyx_XDECREF(__pyx_v_map_control_params_dict);
  __Pyx_XDECREF(__pyx_v_fltr_);
  __Pyx_XDECREF(__pyx_v_Nf);
  __Pyx_XDECREF(__pyx_v_full_fltr);
  __Pyx_XDECREF(__pyx_v_x0);
  __Pyx_XDECREF(__pyx_v_xm);
  __Pyx_XDECREF(__pyx_v_xm_red);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2563:                       generator=None, intervention_fun=None,
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_None);
+2564:               param_keys=None,
    values[4] = ((PyObject *)Py_None);
+2565:                             param_guess_range=None, is_scale_parameter=None,
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_None);
+2566:                             scaled_param_guesses=None, param_length=None,
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)Py_None);
+2567:                             obs=None, fltr=None, Tf=None, obs0=None,
    values[9] = ((PyObject *)Py_None);
    values[10] = ((PyObject *)Py_None);
    values[11] = ((PyObject *)Py_None);
    values[12] = ((PyObject *)Py_None);
+2568:                             inter_steps=None,
    values[13] = ((PyObject *)Py_None);
+2569:                             init_flags=None, init_fltrs=None):
    values[14] = ((PyObject *)Py_None);
    values[15] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_params)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_keys);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_guess_range);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_is_scale_parameter);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_scaled_param_guesses);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_length);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs0);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_flags);
          if (value) { values[14] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 15:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_fltrs);
          if (value) { values[15] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_latent_mean") < 0)) __PYX_ERR(0, 2562, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_params = values[0];
    __pyx_v_contactMatrix = values[1];
    __pyx_v_generator = values[2];
    __pyx_v_intervention_fun = values[3];
    __pyx_v_param_keys = values[4];
    __pyx_v_param_guess_range = values[5];
    __pyx_v_is_scale_parameter = values[6];
    __pyx_v_scaled_param_guesses = values[7];
    __pyx_v_param_length = values[8];
    __pyx_v_obs = values[9];
    __pyx_v_fltr = values[10];
    __pyx_v_Tf = values[11];
    __pyx_v_obs0 = values[12];
    __pyx_v_inter_steps = values[13];
    __pyx_v_init_flags = values[14];
    __pyx_v_init_fltrs = values[15];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_latent_mean", 0, 1, 16, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2562, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type._latent_mean", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_82_latent_mean(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_params, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_param_keys, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses, __pyx_v_param_length, __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_obs0, __pyx_v_inter_steps, __pyx_v_init_flags, __pyx_v_init_fltrs);
 2570:         """Objective function for differentiation call in latent_FIM and latent_FIM_det."""
+2571:         param_estimates = np.copy(params[:param_length])
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_params, 0, 0, NULL, &__pyx_v_param_length, NULL, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_param_estimates = __pyx_t_1;
  __pyx_t_1 = 0;
 2572: 
+2573:         orig_params = pyross.utils.unflatten_parameters(param_estimates,
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyross); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_utils); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unflatten_parameters); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 2574:                                                       param_guess_range,
 2575:                                                       is_scale_parameter,
+2576:                                                       scaled_param_guesses)
  __pyx_t_2 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[5] = {__pyx_t_2, __pyx_v_param_estimates, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 4+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2573, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[5] = {__pyx_t_2, __pyx_v_param_estimates, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 4+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2573, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(4+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2573, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_v_param_estimates);
    __Pyx_GIVEREF(__pyx_v_param_estimates);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_5, __pyx_v_param_estimates);
    __Pyx_INCREF(__pyx_v_param_guess_range);
    __Pyx_GIVEREF(__pyx_v_param_guess_range);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_5, __pyx_v_param_guess_range);
    __Pyx_INCREF(__pyx_v_is_scale_parameter);
    __Pyx_GIVEREF(__pyx_v_is_scale_parameter);
    PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_5, __pyx_v_is_scale_parameter);
    __Pyx_INCREF(__pyx_v_scaled_param_guesses);
    __Pyx_GIVEREF(__pyx_v_scaled_param_guesses);
    PyTuple_SET_ITEM(__pyx_t_4, 3+__pyx_t_5, __pyx_v_scaled_param_guesses);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2573, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_orig_params = __pyx_t_1;
  __pyx_t_1 = 0;
 2577: 
+2578:         init_estimates =  np.copy(params[param_length:])
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2578, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_copy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2578, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_params, 0, 0, &__pyx_v_param_length, NULL, NULL, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2578, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2578, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_init_estimates = __pyx_t_1;
  __pyx_t_1 = 0;
 2579: 
+2580:         map_params_dict, map_control_params_dict = self.fill_params_dict(param_keys, orig_params, return_additional_params=True)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_fill_params_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_v_param_keys);
  __Pyx_GIVEREF(__pyx_v_param_keys);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_param_keys);
  __Pyx_INCREF(__pyx_v_orig_params);
  __Pyx_GIVEREF(__pyx_v_orig_params);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_orig_params);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_return_additional_params, Py_True) < 0) __PYX_ERR(0, 2580, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2580, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2580, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2580, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2580, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = Py_TYPE(__pyx_t_1)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_1); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_1), 2) < 0) __PYX_ERR(0, 2580, __pyx_L1_error)
    __pyx_t_6 = NULL;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2580, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_map_params_dict = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_map_control_params_dict = __pyx_t_4;
  __pyx_t_4 = 0;
+2581:         self.set_params(map_params_dict)
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_params); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2581, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_v_map_params_dict) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_map_params_dict);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2581, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 2582: 
+2583:         if generator is not None:
  __pyx_t_7 = (__pyx_v_generator != Py_None);
  __pyx_t_8 = (__pyx_t_7 != 0);
  if (__pyx_t_8) {
/* … */
  }
+2584:             if intervention_fun is None:
    __pyx_t_8 = (__pyx_v_intervention_fun == Py_None);
    __pyx_t_7 = (__pyx_t_8 != 0);
    if (__pyx_t_7) {
/* … */
      goto __pyx_L6;
    }
+2585:                 self.contactMatrix = generator.constant_contactMatrix(**map_control_params_dict)
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_constant_contactMatrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2585, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (unlikely(__pyx_v_map_control_params_dict == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
        __PYX_ERR(0, 2585, __pyx_L1_error)
      }
      if (likely(PyDict_CheckExact(__pyx_v_map_control_params_dict))) {
        __pyx_t_4 = PyDict_Copy(__pyx_v_map_control_params_dict); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2585, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      } else {
        __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_map_control_params_dict, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2585, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2585, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GIVEREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_v_self->contactMatrix);
      __Pyx_DECREF(__pyx_v_self->contactMatrix);
      __pyx_v_self->contactMatrix = __pyx_t_3;
      __pyx_t_3 = 0;
 2586:             else:
+2587:                 self.contactMatrix = generator.intervention_custom_temporal(intervention_fun, **map_control_params_dict)
    /*else*/ {
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_intervention_custom_temporal); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2587, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2587, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_v_intervention_fun);
      __Pyx_GIVEREF(__pyx_v_intervention_fun);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_intervention_fun);
      if (unlikely(__pyx_v_map_control_params_dict == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
        __PYX_ERR(0, 2587, __pyx_L1_error)
      }
      if (likely(PyDict_CheckExact(__pyx_v_map_control_params_dict))) {
        __pyx_t_2 = PyDict_Copy(__pyx_v_map_control_params_dict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2587, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      } else {
        __pyx_t_2 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_map_control_params_dict, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2587, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2587, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_v_self->contactMatrix);
      __Pyx_DECREF(__pyx_v_self->contactMatrix);
      __pyx_v_self->contactMatrix = __pyx_t_1;
      __pyx_t_1 = 0;
    }
    __pyx_L6:;
 2588: 
+2589:         fltr_ = fltr[1:]
  __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_v_fltr, 1, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2589, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_fltr_ = __pyx_t_1;
  __pyx_t_1 = 0;
+2590:         Nf=fltr_.shape[0]+1
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_fltr_, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2590, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2590, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2590, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_Nf = __pyx_t_1;
  __pyx_t_1 = 0;
+2591:         full_fltr = sparse.block_diag(fltr_)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_sparse); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2591, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_block_diag); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2591, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_2, __pyx_v_fltr_) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_fltr_);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2591, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_full_fltr = __pyx_t_1;
  __pyx_t_1 = 0;
 2592: 
+2593:         x0 = self._construct_inits(init_estimates, init_flags, init_fltrs, obs0, fltr[0])
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_construct_inits); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2593, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_fltr, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2593, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[6] = {__pyx_t_3, __pyx_v_init_estimates, __pyx_v_init_flags, __pyx_v_init_fltrs, __pyx_v_obs0, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_5, 5+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2593, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[6] = {__pyx_t_3, __pyx_v_init_estimates, __pyx_v_init_flags, __pyx_v_init_fltrs, __pyx_v_obs0, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_5, 5+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2593, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(5+__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2593, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_init_estimates);
    __Pyx_GIVEREF(__pyx_v_init_estimates);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_5, __pyx_v_init_estimates);
    __Pyx_INCREF(__pyx_v_init_flags);
    __Pyx_GIVEREF(__pyx_v_init_flags);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_5, __pyx_v_init_flags);
    __Pyx_INCREF(__pyx_v_init_fltrs);
    __Pyx_GIVEREF(__pyx_v_init_fltrs);
    PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_5, __pyx_v_init_fltrs);
    __Pyx_INCREF(__pyx_v_obs0);
    __Pyx_GIVEREF(__pyx_v_obs0);
    PyTuple_SET_ITEM(__pyx_t_9, 3+__pyx_t_5, __pyx_v_obs0);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_9, 4+__pyx_t_5, __pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2593, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_x0 = __pyx_t_1;
  __pyx_t_1 = 0;
 2594: 
+2595:         if inter_steps:
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_inter_steps); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 2595, __pyx_L1_error)
  if (__pyx_t_7) {
/* … */
    goto __pyx_L7;
  }
+2596:             x0 = np.multiply(x0, self.Omega)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2596, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_multiply); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2596, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyFloat_FromDouble(__pyx_v_self->Omega); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2596, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
        __pyx_t_5 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_9)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_x0, __pyx_t_4};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2596, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_x0, __pyx_t_4};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2596, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_3 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2596, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_INCREF(__pyx_v_x0);
      __Pyx_GIVEREF(__pyx_v_x0);
      PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_5, __pyx_v_x0);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_5, __pyx_t_4);
      __pyx_t_4 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2596, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF_SET(__pyx_v_x0, __pyx_t_1);
    __pyx_t_1 = 0;
+2597:             xm = pyross.utils.forward_euler_integration(self._rhs0, x0, 0, Tf, Nf, inter_steps)
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_pyross); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2597, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_utils); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2597, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_forward_euler_integration); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2597, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_rhs0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2597, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
        __pyx_t_5 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_9)) {
      PyObject *__pyx_temp[7] = {__pyx_t_4, __pyx_t_3, __pyx_v_x0, __pyx_int_0, __pyx_v_Tf, __pyx_v_Nf, __pyx_v_inter_steps};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_5, 6+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2597, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
      PyObject *__pyx_temp[7] = {__pyx_t_4, __pyx_t_3, __pyx_v_x0, __pyx_int_0, __pyx_v_Tf, __pyx_v_Nf, __pyx_v_inter_steps};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_5, 6+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2597, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    {
      __pyx_t_2 = PyTuple_New(6+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2597, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_5, __pyx_t_3);
      __Pyx_INCREF(__pyx_v_x0);
      __Pyx_GIVEREF(__pyx_v_x0);
      PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_5, __pyx_v_x0);
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_2, 2+__pyx_t_5, __pyx_int_0);
      __Pyx_INCREF(__pyx_v_Tf);
      __Pyx_GIVEREF(__pyx_v_Tf);
      PyTuple_SET_ITEM(__pyx_t_2, 3+__pyx_t_5, __pyx_v_Tf);
      __Pyx_INCREF(__pyx_v_Nf);
      __Pyx_GIVEREF(__pyx_v_Nf);
      PyTuple_SET_ITEM(__pyx_t_2, 4+__pyx_t_5, __pyx_v_Nf);
      __Pyx_INCREF(__pyx_v_inter_steps);
      __Pyx_GIVEREF(__pyx_v_inter_steps);
      PyTuple_SET_ITEM(__pyx_t_2, 5+__pyx_t_5, __pyx_v_inter_steps);
      __pyx_t_3 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2597, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_v_xm = __pyx_t_1;
    __pyx_t_1 = 0;
+2598:             xm = xm[::inter_steps]
    __pyx_t_1 = PySlice_New(Py_None, Py_None, __pyx_v_inter_steps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2598, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_xm, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2598, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_xm, __pyx_t_9);
    __pyx_t_9 = 0;
+2599:             xm = np.divide(xm, self.Omega)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2599, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_divide); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2599, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->Omega); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2599, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_5 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_xm, __pyx_t_1};
      __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2599, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_xm, __pyx_t_1};
      __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2599, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    {
      __pyx_t_4 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2599, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (__pyx_t_3) {
        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
      }
      __Pyx_INCREF(__pyx_v_xm);
      __Pyx_GIVEREF(__pyx_v_xm);
      PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_5, __pyx_v_xm);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_5, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2599, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_xm, __pyx_t_9);
    __pyx_t_9 = 0;
 2600:         else:
+2601:             xm = self.integrate(x0, 0, Tf, Nf)
  /*else*/ {
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_integrate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2601, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_5 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[5] = {__pyx_t_4, __pyx_v_x0, __pyx_int_0, __pyx_v_Tf, __pyx_v_Nf};
      __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 4+__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2601, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_9);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[5] = {__pyx_t_4, __pyx_v_x0, __pyx_int_0, __pyx_v_Tf, __pyx_v_Nf};
      __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 4+__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2601, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_9);
    } else
    #endif
    {
      __pyx_t_1 = PyTuple_New(4+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2601, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_INCREF(__pyx_v_x0);
      __Pyx_GIVEREF(__pyx_v_x0);
      PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_5, __pyx_v_x0);
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_5, __pyx_int_0);
      __Pyx_INCREF(__pyx_v_Tf);
      __Pyx_GIVEREF(__pyx_v_Tf);
      PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_5, __pyx_v_Tf);
      __Pyx_INCREF(__pyx_v_Nf);
      __Pyx_GIVEREF(__pyx_v_Nf);
      PyTuple_SET_ITEM(__pyx_t_1, 3+__pyx_t_5, __pyx_v_Nf);
      __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2601, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_xm = __pyx_t_9;
    __pyx_t_9 = 0;
  }
  __pyx_L7:;
+2602:         xm_red = full_fltr@(np.ravel(xm[1:]))
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_ravel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_xm, 1, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_9 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_full_fltr, __pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_xm_red = __pyx_t_1;
  __pyx_t_1 = 0;
+2603:         return xm_red
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_xm_red);
  __pyx_r = __pyx_v_xm_red;
  goto __pyx_L0;
 2604: 
+2605:     def _latent_cov(self, params, contactMatrix=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_85_latent_cov(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_84_latent_cov[] = "Objective function for differentiation call in latent_FIM.";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_85_latent_cov(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_params = 0;
  CYTHON_UNUSED PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_param_keys = 0;
  PyObject *__pyx_v_param_guess_range = 0;
  PyObject *__pyx_v_is_scale_parameter = 0;
  PyObject *__pyx_v_scaled_param_guesses = 0;
  PyObject *__pyx_v_param_length = 0;
  CYTHON_UNUSED PyObject *__pyx_v_obs = 0;
  PyObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_obs0 = 0;
  PyObject *__pyx_v_inter_steps = 0;
  PyObject *__pyx_v_init_flags = 0;
  PyObject *__pyx_v_init_fltrs = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_latent_cov (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_params,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_param_keys,&__pyx_n_s_param_guess_range,&__pyx_n_s_is_scale_parameter,&__pyx_n_s_scaled_param_guesses,&__pyx_n_s_param_length,&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_obs0,&__pyx_n_s_inter_steps,&__pyx_n_s_init_flags,&__pyx_n_s_init_fltrs,&__pyx_n_s_tangent,0};
    PyObject* values[17] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[1] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_84_latent_cov(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_params, CYTHON_UNUSED PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_param_keys, PyObject *__pyx_v_param_guess_range, PyObject *__pyx_v_is_scale_parameter, PyObject *__pyx_v_scaled_param_guesses, PyObject *__pyx_v_param_length, CYTHON_UNUSED PyObject *__pyx_v_obs, PyObject *__pyx_v_fltr, PyObject *__pyx_v_Tf, PyObject *__pyx_v_obs0, PyObject *__pyx_v_inter_steps, PyObject *__pyx_v_init_flags, PyObject *__pyx_v_init_fltrs, PyObject *__pyx_v_tangent) {
  PyObject *__pyx_v_param_estimates = NULL;
  PyObject *__pyx_v_orig_params = NULL;
  PyObject *__pyx_v_init_estimates = NULL;
  PyObject *__pyx_v_map_params_dict = NULL;
  PyObject *__pyx_v_map_control_params_dict = NULL;
  PyObject *__pyx_v_x0 = NULL;
  PyObject *__pyx_v_fltr_ = NULL;
  PyObject *__pyx_v_Nf = NULL;
  PyObject *__pyx_v_full_fltr = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_xm = NULL;
  PyObject *__pyx_v_full_cov = NULL;
  PyObject *__pyx_v_cov_red = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_latent_cov", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_9);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __Pyx_AddTraceback("pyross.inference.SIR_type._latent_cov", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_param_estimates);
  __Pyx_XDECREF(__pyx_v_orig_params);
  __Pyx_XDECREF(__pyx_v_init_estimates);
  __Pyx_XDECREF(__pyx_v_map_params_dict);
  __Pyx_XDECREF(__pyx_v_map_control_params_dict);
  __Pyx_XDECREF(__pyx_v_x0);
  __Pyx_XDECREF(__pyx_v_fltr_);
  __Pyx_XDECREF(__pyx_v_Nf);
  __Pyx_XDECREF(__pyx_v_full_fltr);
  __Pyx_XDECREF(__pyx_v_xm);
  __Pyx_XDECREF(__pyx_v_full_cov);
  __Pyx_XDECREF(__pyx_v_cov_red);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2606:              generator=None, intervention_fun=None,
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_None);
+2607:              param_keys=None,
    values[4] = ((PyObject *)Py_None);
+2608:                             param_guess_range=None, is_scale_parameter=None,
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_None);
+2609:                             scaled_param_guesses=None, param_length=None,
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)Py_None);
+2610:                             obs=None, fltr=None, Tf=None, obs0=None,
    values[9] = ((PyObject *)Py_None);
    values[10] = ((PyObject *)Py_None);
    values[11] = ((PyObject *)Py_None);
    values[12] = ((PyObject *)Py_None);
+2611:                             inter_steps=None,
    values[13] = ((PyObject *)Py_None);
+2612:                             init_flags=None, init_fltrs=None, tangent=False):
    values[14] = ((PyObject *)Py_None);
    values[15] = ((PyObject *)Py_None);
    values[16] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_params)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_keys);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_guess_range);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_is_scale_parameter);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_scaled_param_guesses);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_length);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs0);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_flags);
          if (value) { values[14] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 15:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_fltrs);
          if (value) { values[15] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 16:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[16] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_latent_cov") < 0)) __PYX_ERR(0, 2605, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_params = values[0];
    __pyx_v_contactMatrix = values[1];
    __pyx_v_generator = values[2];
    __pyx_v_intervention_fun = values[3];
    __pyx_v_param_keys = values[4];
    __pyx_v_param_guess_range = values[5];
    __pyx_v_is_scale_parameter = values[6];
    __pyx_v_scaled_param_guesses = values[7];
    __pyx_v_param_length = values[8];
    __pyx_v_obs = values[9];
    __pyx_v_fltr = values[10];
    __pyx_v_Tf = values[11];
    __pyx_v_obs0 = values[12];
    __pyx_v_inter_steps = values[13];
    __pyx_v_init_flags = values[14];
    __pyx_v_init_fltrs = values[15];
    __pyx_v_tangent = values[16];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_latent_cov", 0, 1, 17, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2605, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type._latent_cov", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_84_latent_cov(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_params, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_param_keys, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses, __pyx_v_param_length, __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_obs0, __pyx_v_inter_steps, __pyx_v_init_flags, __pyx_v_init_fltrs, __pyx_v_tangent);
 2613:         """Objective function for differentiation call in latent_FIM."""
+2614:         param_estimates = np.copy(params[:param_length])
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_params, 0, 0, NULL, &__pyx_v_param_length, NULL, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_param_estimates = __pyx_t_1;
  __pyx_t_1 = 0;
 2615: 
+2616:         orig_params = pyross.utils.unflatten_parameters(param_estimates,
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyross); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_utils); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unflatten_parameters); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 2617:                                                       param_guess_range,
 2618:                                                       is_scale_parameter,
+2619:                                                       scaled_param_guesses)
  __pyx_t_2 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[5] = {__pyx_t_2, __pyx_v_param_estimates, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 4+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2616, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[5] = {__pyx_t_2, __pyx_v_param_estimates, __pyx_v_param_guess_range, __pyx_v_is_scale_parameter, __pyx_v_scaled_param_guesses};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 4+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2616, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(4+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2616, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_v_param_estimates);
    __Pyx_GIVEREF(__pyx_v_param_estimates);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_5, __pyx_v_param_estimates);
    __Pyx_INCREF(__pyx_v_param_guess_range);
    __Pyx_GIVEREF(__pyx_v_param_guess_range);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_5, __pyx_v_param_guess_range);
    __Pyx_INCREF(__pyx_v_is_scale_parameter);
    __Pyx_GIVEREF(__pyx_v_is_scale_parameter);
    PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_5, __pyx_v_is_scale_parameter);
    __Pyx_INCREF(__pyx_v_scaled_param_guesses);
    __Pyx_GIVEREF(__pyx_v_scaled_param_guesses);
    PyTuple_SET_ITEM(__pyx_t_4, 3+__pyx_t_5, __pyx_v_scaled_param_guesses);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2616, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_orig_params = __pyx_t_1;
  __pyx_t_1 = 0;
 2620: 
+2621:         init_estimates =  np.copy(params[param_length:])
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2621, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_copy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2621, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_params, 0, 0, &__pyx_v_param_length, NULL, NULL, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2621, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2621, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_init_estimates = __pyx_t_1;
  __pyx_t_1 = 0;
 2622: 
+2623:         map_params_dict, map_control_params_dict = self.fill_params_dict(param_keys, orig_params, return_additional_params=True)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_fill_params_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_v_param_keys);
  __Pyx_GIVEREF(__pyx_v_param_keys);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_param_keys);
  __Pyx_INCREF(__pyx_v_orig_params);
  __Pyx_GIVEREF(__pyx_v_orig_params);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_orig_params);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_return_additional_params, Py_True) < 0) __PYX_ERR(0, 2623, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2623, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2623, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2623, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2623, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = Py_TYPE(__pyx_t_1)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_1); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_1), 2) < 0) __PYX_ERR(0, 2623, __pyx_L1_error)
    __pyx_t_6 = NULL;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2623, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_map_params_dict = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_map_control_params_dict = __pyx_t_4;
  __pyx_t_4 = 0;
+2624:         self.set_params(map_params_dict)
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_params); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_v_map_params_dict) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_map_params_dict);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 2625: 
+2626:         if generator is not None:
  __pyx_t_7 = (__pyx_v_generator != Py_None);
  __pyx_t_8 = (__pyx_t_7 != 0);
  if (__pyx_t_8) {
/* … */
  }
+2627:             if intervention_fun is None:
    __pyx_t_8 = (__pyx_v_intervention_fun == Py_None);
    __pyx_t_7 = (__pyx_t_8 != 0);
    if (__pyx_t_7) {
/* … */
      goto __pyx_L6;
    }
+2628:                 self.contactMatrix = generator.constant_contactMatrix(**map_control_params_dict)
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_constant_contactMatrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2628, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (unlikely(__pyx_v_map_control_params_dict == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
        __PYX_ERR(0, 2628, __pyx_L1_error)
      }
      if (likely(PyDict_CheckExact(__pyx_v_map_control_params_dict))) {
        __pyx_t_4 = PyDict_Copy(__pyx_v_map_control_params_dict); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2628, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      } else {
        __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_map_control_params_dict, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2628, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2628, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GIVEREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_v_self->contactMatrix);
      __Pyx_DECREF(__pyx_v_self->contactMatrix);
      __pyx_v_self->contactMatrix = __pyx_t_3;
      __pyx_t_3 = 0;
 2629:             else:
+2630:                 self.contactMatrix = generator.intervention_custom_temporal(intervention_fun, **map_control_params_dict)
    /*else*/ {
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_generator, __pyx_n_s_intervention_custom_temporal); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2630, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2630, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_v_intervention_fun);
      __Pyx_GIVEREF(__pyx_v_intervention_fun);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_intervention_fun);
      if (unlikely(__pyx_v_map_control_params_dict == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
        __PYX_ERR(0, 2630, __pyx_L1_error)
      }
      if (likely(PyDict_CheckExact(__pyx_v_map_control_params_dict))) {
        __pyx_t_2 = PyDict_Copy(__pyx_v_map_control_params_dict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2630, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      } else {
        __pyx_t_2 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_map_control_params_dict, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2630, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2630, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_v_self->contactMatrix);
      __Pyx_DECREF(__pyx_v_self->contactMatrix);
      __pyx_v_self->contactMatrix = __pyx_t_1;
      __pyx_t_1 = 0;
    }
    __pyx_L6:;
 2631: 
+2632:         x0 = self._construct_inits(init_estimates, init_flags, init_fltrs, obs0, fltr[0])
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_construct_inits); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2632, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_fltr, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2632, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[6] = {__pyx_t_3, __pyx_v_init_estimates, __pyx_v_init_flags, __pyx_v_init_fltrs, __pyx_v_obs0, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 5+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2632, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[6] = {__pyx_t_3, __pyx_v_init_estimates, __pyx_v_init_flags, __pyx_v_init_fltrs, __pyx_v_obs0, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 5+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2632, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(5+__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2632, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_init_estimates);
    __Pyx_GIVEREF(__pyx_v_init_estimates);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_5, __pyx_v_init_estimates);
    __Pyx_INCREF(__pyx_v_init_flags);
    __Pyx_GIVEREF(__pyx_v_init_flags);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_5, __pyx_v_init_flags);
    __Pyx_INCREF(__pyx_v_init_fltrs);
    __Pyx_GIVEREF(__pyx_v_init_fltrs);
    PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_5, __pyx_v_init_fltrs);
    __Pyx_INCREF(__pyx_v_obs0);
    __Pyx_GIVEREF(__pyx_v_obs0);
    PyTuple_SET_ITEM(__pyx_t_9, 3+__pyx_t_5, __pyx_v_obs0);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_9, 4+__pyx_t_5, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2632, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_x0 = __pyx_t_1;
  __pyx_t_1 = 0;
+2633:         fltr_ = fltr[1:]
  __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_v_fltr, 1, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2633, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_fltr_ = __pyx_t_1;
  __pyx_t_1 = 0;
+2634:         Nf=fltr_.shape[0]+1
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_fltr_, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_Nf = __pyx_t_1;
  __pyx_t_1 = 0;
+2635:         full_fltr = sparse.block_diag(fltr_)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_sparse); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2635, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_block_diag); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2635, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_9, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_2, __pyx_v_fltr_) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_fltr_);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2635, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_full_fltr = __pyx_t_1;
  __pyx_t_1 = 0;
 2636: 
+2637:         if tangent:
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_tangent); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 2637, __pyx_L1_error)
  if (__pyx_t_7) {
/* … */
    goto __pyx_L7;
  }
+2638:             xm, full_cov = self.obtain_full_mean_cov_tangent_space(x0, Tf, Nf,
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_x0, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 2638, __pyx_L1_error)
    __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_v_Tf); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2638, __pyx_L1_error)
    __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_v_Nf); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 2638, __pyx_L1_error)
/* … */
    __pyx_t_14.__pyx_n = 1;
    __pyx_t_14.inter_steps = __pyx_t_13;
    __pyx_t_1 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->obtain_full_mean_cov_tangent_space(__pyx_v_self, __pyx_t_10, __pyx_t_11, __pyx_t_12, 0, &__pyx_t_14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2638, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
    __pyx_t_10.memview = NULL;
    __pyx_t_10.data = NULL;
    if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
      PyObject* sequence = __pyx_t_1;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 2638, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_9 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_2);
      #else
      __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2638, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2638, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2638, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext;
      index = 0; __pyx_t_9 = __pyx_t_6(__pyx_t_4); if (unlikely(!__pyx_t_9)) goto __pyx_L8_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_9);
      index = 1; __pyx_t_2 = __pyx_t_6(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L8_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_2);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_4), 2) < 0) __PYX_ERR(0, 2638, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L9_unpacking_done;
      __pyx_L8_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 2638, __pyx_L1_error)
      __pyx_L9_unpacking_done:;
    }
    __pyx_v_xm = __pyx_t_9;
    __pyx_t_9 = 0;
    __pyx_v_full_cov = __pyx_t_2;
    __pyx_t_2 = 0;
+2639:                                                                   inter_steps)
    __pyx_t_13 = __Pyx_PyIndex_AsSsize_t(__pyx_v_inter_steps); if (unlikely((__pyx_t_13 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 2639, __pyx_L1_error)
 2640:         else:
+2641:             xm, full_cov = self.obtain_full_mean_cov(x0, Tf, Nf, inter_steps)
  /*else*/ {
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_x0, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 2641, __pyx_L1_error)
    __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_v_Tf); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2641, __pyx_L1_error)
    __pyx_t_13 = __Pyx_PyIndex_AsSsize_t(__pyx_v_Nf); if (unlikely((__pyx_t_13 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 2641, __pyx_L1_error)
    __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_v_inter_steps); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 2641, __pyx_L1_error)
    __pyx_t_15.__pyx_n = 1;
    __pyx_t_15.inter_steps = __pyx_t_12;
    __pyx_t_1 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->obtain_full_mean_cov(__pyx_v_self, __pyx_t_10, __pyx_t_11, __pyx_t_13, 0, &__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
    __pyx_t_10.memview = NULL;
    __pyx_t_10.data = NULL;
    if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
      PyObject* sequence = __pyx_t_1;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 2641, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_9);
      #else
      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2641, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2641, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2641, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext;
      index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L10_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_2);
      index = 1; __pyx_t_9 = __pyx_t_6(__pyx_t_4); if (unlikely(!__pyx_t_9)) goto __pyx_L10_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_9);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_4), 2) < 0) __PYX_ERR(0, 2641, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L11_unpacking_done;
      __pyx_L10_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 2641, __pyx_L1_error)
      __pyx_L11_unpacking_done:;
    }
    __pyx_v_xm = __pyx_t_2;
    __pyx_t_2 = 0;
    __pyx_v_full_cov = __pyx_t_9;
    __pyx_t_9 = 0;
  }
  __pyx_L7:;
 2642: 
+2643:         cov_red = full_fltr@full_cov@np.transpose(full_fltr)
  __pyx_t_1 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_full_fltr, __pyx_v_full_cov); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2643, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2643, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_transpose); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2643, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_9 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_2, __pyx_v_full_fltr) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_full_fltr);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2643, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_1, __pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2643, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_cov_red = __pyx_t_4;
  __pyx_t_4 = 0;
+2644:         return cov_red
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_cov_red);
  __pyx_r = __pyx_v_cov_red;
  goto __pyx_L0;
 2645: 
+2646:     def latent_FIM(self, obs, fltr, Tf, infer_result, contactMatrix=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_87latent_FIM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_86latent_FIM[] = "\n        Computes the Fisher Information Matrix (FIM) of the stochastic model for the initial conditions and all desired parameters, including control parameters, for a SIR type model with partially observed classes. The unobserved classes are treated as latent variables.\n\n        Parameters\n        ----------\n        obs:  np.array\n            The partially observed trajectory.\n        fltr: 2d np.array\n            The filter for the observation such that\n            :math:`F_{ij} x_j (t) = obs_i(t)`\n        Tf: float\n            Total time of the trajectory\n        infer_result: dict\n            Dictionary returned by latent_infer\n        contactMatrix: callable, optional\n            A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.\n            Either a contactMatrix or a generator must be specified.\n        generator: pyross.contactMatrix, optional\n            A pyross.contactMatrix object that generates a contact matrix function with specified lockdown\n            parameters.\n            Either a contactMatrix or a generator must be specified.\n        intervention_fun: callable, optional\n            The calling signature is `intervention_func(t, **kwargs)`,\n            where t is time and kwargs are other keyword arguments for the function.\n            The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.\n            The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.\n            If not set, assume intervention that's constant in time.\n            See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.\n        tangent: bool, optional\n            Set to True to use tangent space inference. Default is False.\n        eps: float or numpy.array, optional\n            Step size for numerical differentiation of the process mean and its full covariance matrix with \n            respect to the parameters"". Must be either a scalar, or an array of length `len(infer_result['flat_params'])`. \n            If not specified,\n            \n            .. code-block:: python\n\n               eps = 100*infer_result['flat_params'] \n                     *numpy.divide(numpy.spacing(infer_result['log_likelihood']),\n                     infer_result['log_likelihood'])**(0.25) \n\n            is used. It is recommended to use a step-size greater or equal to `eps`. Decreasing the step size too small can result in round-off error.\n        inter_steps: int, optional\n            Intermediate steps between observations for the deterministic forward Euler integration. \n            A higher number of intermediate steps will improve the accuracy of the result, but will \n            make computations slower. Setting `inter_steps=0` will fall back to the method accessible via \n            `det_method` for the deterministic integration. We have found that forward Euler is generally \n            slower, but more stable for derivatives with respect to parameters than the variable step \n            size integrators used elsewhere in pyross. Default is 100.\n        Returns\n        -------\n        FIM: 2d numpy.array\n            The Fisher Information Matrix\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_87latent_FIM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_obs = 0;
  PyObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_infer_result = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_eps = 0;
  PyObject *__pyx_v_inter_steps = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_FIM (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_infer_result,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_tangent,&__pyx_n_s_eps,&__pyx_n_s_inter_steps,0};
    PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0};
    values[4] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_86latent_FIM(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_obs, PyObject *__pyx_v_fltr, PyObject *__pyx_v_Tf, PyObject *__pyx_v_infer_result, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_tangent, PyObject *__pyx_v_eps, PyObject *__pyx_v_inter_steps) {
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_3_latent_FIM *__pyx_cur_scope;
  PyObject *__pyx_v_infer_result_loc = NULL;
  PyObject *__pyx_v_flat_params = NULL;
  PyObject *__pyx_v_key = NULL;
  PyObject *__pyx_v_mean = 0;
  PyObject *__pyx_v_covariance = 0;
  PyObject *__pyx_v_xx = NULL;
  PyObject *__pyx_v_fx = NULL;
  PyObject *__pyx_v_cov = NULL;
  PyObject *__pyx_v_invcov = NULL;
  Py_ssize_t __pyx_v_dim;
  PyObject *__pyx_v_FIM = NULL;
  PyObject *__pyx_v_dmu = NULL;
  PyObject *__pyx_v_dcov = NULL;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_t1 = NULL;
  PyObject *__pyx_v_t2 = NULL;
  PyObject *__pyx_v_rows = NULL;
  PyObject *__pyx_v_cols = NULL;
  PyObject *__pyx_v_j = NULL;
  PyObject *__pyx_v_i_lower = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_FIM", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pyross_9inference___pyx_scope_struct_3_latent_FIM *)__pyx_tp_new_6pyross_9inference___pyx_scope_struct_3_latent_FIM(__pyx_ptype_6pyross_9inference___pyx_scope_struct_3_latent_FIM, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pyross_9inference___pyx_scope_struct_3_latent_FIM *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 2646, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_obs = __pyx_v_obs;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_obs);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_obs);
  __pyx_cur_scope->__pyx_v_fltr = __pyx_v_fltr;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_fltr);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_fltr);
  __pyx_cur_scope->__pyx_v_Tf = __pyx_v_Tf;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_Tf);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_Tf);
  __pyx_cur_scope->__pyx_v_contactMatrix = __pyx_v_contactMatrix;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_contactMatrix);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_contactMatrix);
  __pyx_cur_scope->__pyx_v_generator = __pyx_v_generator;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_generator);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_generator);
  __pyx_cur_scope->__pyx_v_intervention_fun = __pyx_v_intervention_fun;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_intervention_fun);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_intervention_fun);
  __pyx_cur_scope->__pyx_v_tangent = __pyx_v_tangent;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_tangent);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_tangent);
  __pyx_cur_scope->__pyx_v_inter_steps = __pyx_v_inter_steps;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_inter_steps);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_inter_steps);
  __Pyx_INCREF(__pyx_v_eps);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_FIM", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_infer_result_loc);
  __Pyx_XDECREF(__pyx_v_flat_params);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_mean);
  __Pyx_XDECREF(__pyx_v_covariance);
  __Pyx_XDECREF(__pyx_v_xx);
  __Pyx_XDECREF(__pyx_v_fx);
  __Pyx_XDECREF(__pyx_v_cov);
  __Pyx_XDECREF(__pyx_v_invcov);
  __Pyx_XDECREF(__pyx_v_FIM);
  __Pyx_XDECREF(__pyx_v_dmu);
  __Pyx_XDECREF(__pyx_v_dcov);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_t1);
  __Pyx_XDECREF(__pyx_v_t2);
  __Pyx_XDECREF(__pyx_v_rows);
  __Pyx_XDECREF(__pyx_v_cols);
  __Pyx_XDECREF(__pyx_v_j);
  __Pyx_XDECREF(__pyx_v_i_lower);
  __Pyx_XDECREF(__pyx_v_eps);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_obj_6pyross_9inference___pyx_scope_struct_3_latent_FIM {
  PyObject_HEAD
  PyObject *__pyx_v_Tf;
  PyObject *__pyx_v_contactMatrix;
  PyObject *__pyx_v_fltr;
  PyObject *__pyx_v_generator;
  PyObject *__pyx_v_inter_steps;
  PyObject *__pyx_v_intervention_fun;
  PyObject *__pyx_v_kwargs;
  PyObject *__pyx_v_obs;
  PyObject *__pyx_v_obs0;
  struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self;
  PyObject *__pyx_v_tangent;
};

+2647:                    generator=None,
    values[5] = ((PyObject *)Py_None);
+2648:                    intervention_fun=None, tangent=False, eps=None,
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject *)Py_False);
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject *)__pyx_int_100);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_FIM", 0, 4, 10, 1); __PYX_ERR(0, 2646, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_FIM", 0, 4, 10, 2); __PYX_ERR(0, 2646, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_infer_result)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_FIM", 0, 4, 10, 3); __PYX_ERR(0, 2646, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[9] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "latent_FIM") < 0)) __PYX_ERR(0, 2646, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obs = values[0];
    __pyx_v_fltr = values[1];
    __pyx_v_Tf = values[2];
    __pyx_v_infer_result = values[3];
    __pyx_v_contactMatrix = values[4];
    __pyx_v_generator = values[5];
    __pyx_v_intervention_fun = values[6];
    __pyx_v_tangent = values[7];
    __pyx_v_eps = values[8];
    __pyx_v_inter_steps = values[9];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("latent_FIM", 0, 4, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2646, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_FIM", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_86latent_FIM(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_eps, __pyx_v_inter_steps);
 2649:                    inter_steps=100):
 2650:         """
 2651:         Computes the Fisher Information Matrix (FIM) of the stochastic model for the initial conditions and all desired parameters, including control parameters, for a SIR type model with partially observed classes. The unobserved classes are treated as latent variables.
 2652: 
 2653:         Parameters
 2654:         ----------
 2655:         obs:  np.array
 2656:             The partially observed trajectory.
 2657:         fltr: 2d np.array
 2658:             The filter for the observation such that
 2659:             :math:`F_{ij} x_j (t) = obs_i(t)`
 2660:         Tf: float
 2661:             Total time of the trajectory
 2662:         infer_result: dict
 2663:             Dictionary returned by latent_infer
 2664:         contactMatrix: callable, optional
 2665:             A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.
 2666:             Either a contactMatrix or a generator must be specified.
 2667:         generator: pyross.contactMatrix, optional
 2668:             A pyross.contactMatrix object that generates a contact matrix function with specified lockdown
 2669:             parameters.
 2670:             Either a contactMatrix or a generator must be specified.
 2671:         intervention_fun: callable, optional
 2672:             The calling signature is `intervention_func(t, **kwargs)`,
 2673:             where t is time and kwargs are other keyword arguments for the function.
 2674:             The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.
 2675:             The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.
 2676:             If not set, assume intervention that's constant in time.
 2677:             See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.
 2678:         tangent: bool, optional
 2679:             Set to True to use tangent space inference. Default is False.
 2680:         eps: float or numpy.array, optional
 2681:             Step size for numerical differentiation of the process mean and its full covariance matrix with 
 2682:             respect to the parameters. Must be either a scalar, or an array of length `len(infer_result['flat_params'])`. 
 2683:             If not specified,
 2684:             
 2685:             .. code-block:: python
 2686: 
 2687:                eps = 100*infer_result['flat_params'] 
 2688:                      *numpy.divide(numpy.spacing(infer_result['log_likelihood']),
 2689:                      infer_result['log_likelihood'])**(0.25) 
 2690: 
 2691:             is used. It is recommended to use a step-size greater or equal to `eps`. Decreasing the step size too small can result in round-off error.
 2692:         inter_steps: int, optional
 2693:             Intermediate steps between observations for the deterministic forward Euler integration. 
 2694:             A higher number of intermediate steps will improve the accuracy of the result, but will 
 2695:             make computations slower. Setting `inter_steps=0` will fall back to the method accessible via 
 2696:             `det_method` for the deterministic integration. We have found that forward Euler is generally 
 2697:             slower, but more stable for derivatives with respect to parameters than the variable step 
 2698:             size integrators used elsewhere in pyross. Default is 100.
 2699:         Returns
 2700:         -------
 2701:         FIM: 2d numpy.array
 2702:             The Fisher Information Matrix
 2703:         """
 2704:         # Sanity checks of the inputs
+2705:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_contactMatrix, __pyx_cur_scope->__pyx_v_generator, __pyx_cur_scope->__pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2705, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_contactMatrix, __pyx_cur_scope->__pyx_v_generator, __pyx_cur_scope->__pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2705, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2705, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_cur_scope->__pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_cur_scope->__pyx_v_generator);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_cur_scope->__pyx_v_intervention_fun);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2705, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2706: 
 2707:         # Process fltr and obs
+2708:         fltr, obs, obs0 = pyross.utils.process_latent_data(fltr, obs)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_process_latent_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_cur_scope->__pyx_v_fltr, __pyx_cur_scope->__pyx_v_obs};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2708, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_cur_scope->__pyx_v_fltr, __pyx_cur_scope->__pyx_v_obs};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2708, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_3 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2708, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_fltr);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_fltr);
    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_4, __pyx_cur_scope->__pyx_v_fltr);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_obs);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_obs);
    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_4, __pyx_cur_scope->__pyx_v_obs);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2708, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2708, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_5);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2708, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2708, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2708, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2708, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 2; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 3) < 0) __PYX_ERR(0, 2708, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2708, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_fltr);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_fltr, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_obs);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_obs, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_cur_scope->__pyx_v_obs0 = __pyx_t_5;
  __pyx_t_5 = 0;
 2709: 
+2710:         infer_result_loc = infer_result.copy()
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_infer_result, __pyx_n_s_copy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_infer_result_loc = __pyx_t_1;
  __pyx_t_1 = 0;
 2711:         # backwards compatibility
+2712:         if 'flat_map' in infer_result_loc:
  __pyx_t_8 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_flat_map, __pyx_v_infer_result_loc, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 2712, __pyx_L1_error)
  __pyx_t_9 = (__pyx_t_8 != 0);
  if (__pyx_t_9) {
/* … */
  }
+2713:             infer_result_loc['flat_params'] = infer_result_loc.pop('flat_map')
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_infer_result_loc, __pyx_n_s_pop); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2713, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_n_u_flat_map) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_n_u_flat_map);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2713, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_infer_result_loc, __pyx_n_u_flat_params, __pyx_t_1) < 0)) __PYX_ERR(0, 2713, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2714: 
+2715:         flat_params = np.copy(infer_result_loc['flat_params'])
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result_loc, __pyx_n_u_flat_params); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_flat_params = __pyx_t_1;
  __pyx_t_1 = 0;
 2716: 
+2717:         kwargs = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2717, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_kwargs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+2718:         for key in ['param_keys', 'param_guess_range', 'is_scale_parameter',
  __pyx_t_1 = __pyx_tuple__22; __Pyx_INCREF(__pyx_t_1); __pyx_t_10 = 0;
  for (;;) {
    if (__pyx_t_10 >= 7) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 2718, __pyx_L1_error)
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_key, ((PyObject*)__pyx_t_3));
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple__22 = PyTuple_Pack(7, __pyx_n_u_param_keys, __pyx_n_u_param_guess_range, __pyx_n_u_is_scale_parameter, __pyx_n_u_scaled_param_guesses, __pyx_n_u_param_length, __pyx_n_u_init_flags, __pyx_n_u_init_fltrs); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 2718, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__22);
  __Pyx_GIVEREF(__pyx_tuple__22);
 2719:                     'scaled_param_guesses', 'param_length', 'init_flags',
 2720:                     'init_fltrs']:
+2721:             kwargs[key] = infer_result_loc[key]
    __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result_loc, __pyx_v_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2721, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_kwargs, __pyx_v_key, __pyx_t_3) < 0)) __PYX_ERR(0, 2721, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 2722: 
+2723:         def mean(y):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_10latent_FIM_1mean(PyObject *__pyx_self, PyObject *__pyx_v_y); /*proto*/
static PyMethodDef __pyx_mdef_6pyross_9inference_8SIR_type_10latent_FIM_1mean = {"mean", (PyCFunction)__pyx_pw_6pyross_9inference_8SIR_type_10latent_FIM_1mean, METH_O, 0};
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_10latent_FIM_1mean(PyObject *__pyx_self, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mean (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_10latent_FIM_mean(__pyx_self, ((PyObject *)__pyx_v_y));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_10latent_FIM_mean(PyObject *__pyx_self, PyObject *__pyx_v_y) {
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_3_latent_FIM *__pyx_cur_scope;
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_3_latent_FIM *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mean", 0);
  __pyx_outer_scope = (struct __pyx_obj_6pyross_9inference___pyx_scope_struct_3_latent_FIM *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_FIM.mean", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__23 = PyTuple_Pack(1, __pyx_n_s_y); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 2723, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__23);
  __Pyx_GIVEREF(__pyx_tuple__23);
/* … */
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6pyross_9inference_8SIR_type_10latent_FIM_1mean, 0, __pyx_n_s_latent_FIM_locals_mean, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pyross_inference, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2723, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_mean = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyross_inference_pyx, __pyx_n_s_mean_2, 2723, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 2723, __pyx_L1_error)
+2724:             return self._latent_mean(y, contactMatrix=contactMatrix,
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 2724, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_latent_mean); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_y);
  __Pyx_GIVEREF(__pyx_v_y);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(!__pyx_cur_scope->__pyx_v_contactMatrix)) { __Pyx_RaiseClosureNameError("contactMatrix"); __PYX_ERR(0, 2724, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_contactMatrix, __pyx_cur_scope->__pyx_v_contactMatrix) < 0) __PYX_ERR(0, 2724, __pyx_L1_error)
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
+2725:                                       generator=generator,
  if (unlikely(!__pyx_cur_scope->__pyx_v_generator)) { __Pyx_RaiseClosureNameError("generator"); __PYX_ERR(0, 2725, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_generator, __pyx_cur_scope->__pyx_v_generator) < 0) __PYX_ERR(0, 2724, __pyx_L1_error)
+2726:                               intervention_fun=intervention_fun, obs=obs,
  if (unlikely(!__pyx_cur_scope->__pyx_v_intervention_fun)) { __Pyx_RaiseClosureNameError("intervention_fun"); __PYX_ERR(0, 2726, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_intervention_fun, __pyx_cur_scope->__pyx_v_intervention_fun) < 0) __PYX_ERR(0, 2724, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_v_obs)) { __Pyx_RaiseClosureNameError("obs"); __PYX_ERR(0, 2726, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_obs, __pyx_cur_scope->__pyx_v_obs) < 0) __PYX_ERR(0, 2724, __pyx_L1_error)
+2727:                               fltr=fltr, Tf=Tf, obs0=obs0,
  if (unlikely(!__pyx_cur_scope->__pyx_v_fltr)) { __Pyx_RaiseClosureNameError("fltr"); __PYX_ERR(0, 2727, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_fltr, __pyx_cur_scope->__pyx_v_fltr) < 0) __PYX_ERR(0, 2724, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_v_Tf)) { __Pyx_RaiseClosureNameError("Tf"); __PYX_ERR(0, 2727, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_Tf, __pyx_cur_scope->__pyx_v_Tf) < 0) __PYX_ERR(0, 2724, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_v_obs0)) { __Pyx_RaiseClosureNameError("obs0"); __PYX_ERR(0, 2727, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_obs0, __pyx_cur_scope->__pyx_v_obs0) < 0) __PYX_ERR(0, 2724, __pyx_L1_error)
+2728:                               inter_steps=inter_steps,
  if (unlikely(!__pyx_cur_scope->__pyx_v_inter_steps)) { __Pyx_RaiseClosureNameError("inter_steps"); __PYX_ERR(0, 2728, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_inter_steps, __pyx_cur_scope->__pyx_v_inter_steps) < 0) __PYX_ERR(0, 2724, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_4;
  __pyx_t_4 = 0;
+2729:                               **kwargs)
  if (unlikely(!__pyx_cur_scope->__pyx_v_kwargs)) { __Pyx_RaiseClosureNameError("kwargs"); __PYX_ERR(0, 2729, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_v_kwargs == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
    __PYX_ERR(0, 2729, __pyx_L1_error)
  }
  if (__Pyx_MergeKeywords(__pyx_t_3, __pyx_cur_scope->__pyx_v_kwargs) < 0) __PYX_ERR(0, 2729, __pyx_L1_error)
 2730: 
+2731:         def covariance(y):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_10latent_FIM_3covariance(PyObject *__pyx_self, PyObject *__pyx_v_y); /*proto*/
static PyMethodDef __pyx_mdef_6pyross_9inference_8SIR_type_10latent_FIM_3covariance = {"covariance", (PyCFunction)__pyx_pw_6pyross_9inference_8SIR_type_10latent_FIM_3covariance, METH_O, 0};
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_10latent_FIM_3covariance(PyObject *__pyx_self, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("covariance (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_10latent_FIM_2covariance(__pyx_self, ((PyObject *)__pyx_v_y));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_10latent_FIM_2covariance(PyObject *__pyx_self, PyObject *__pyx_v_y) {
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_3_latent_FIM *__pyx_cur_scope;
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_3_latent_FIM *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("covariance", 0);
  __pyx_outer_scope = (struct __pyx_obj_6pyross_9inference___pyx_scope_struct_3_latent_FIM *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_FIM.covariance", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__25 = PyTuple_Pack(1, __pyx_n_s_y); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 2731, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__25);
  __Pyx_GIVEREF(__pyx_tuple__25);
/* … */
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6pyross_9inference_8SIR_type_10latent_FIM_3covariance, 0, __pyx_n_s_latent_FIM_locals_covariance, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pyross_inference, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2731, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_covariance = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyross_inference_pyx, __pyx_n_s_covariance, 2731, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 2731, __pyx_L1_error)
+2732:             return self._latent_cov(y, contactMatrix=contactMatrix,
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 2732, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_latent_cov); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2732, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2732, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_y);
  __Pyx_GIVEREF(__pyx_v_y);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2732, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(!__pyx_cur_scope->__pyx_v_contactMatrix)) { __Pyx_RaiseClosureNameError("contactMatrix"); __PYX_ERR(0, 2732, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_contactMatrix, __pyx_cur_scope->__pyx_v_contactMatrix) < 0) __PYX_ERR(0, 2732, __pyx_L1_error)
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2732, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
+2733:                                      generator=generator,
  if (unlikely(!__pyx_cur_scope->__pyx_v_generator)) { __Pyx_RaiseClosureNameError("generator"); __PYX_ERR(0, 2733, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_generator, __pyx_cur_scope->__pyx_v_generator) < 0) __PYX_ERR(0, 2732, __pyx_L1_error)
+2734:                               intervention_fun=intervention_fun, obs=obs,
  if (unlikely(!__pyx_cur_scope->__pyx_v_intervention_fun)) { __Pyx_RaiseClosureNameError("intervention_fun"); __PYX_ERR(0, 2734, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_intervention_fun, __pyx_cur_scope->__pyx_v_intervention_fun) < 0) __PYX_ERR(0, 2732, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_v_obs)) { __Pyx_RaiseClosureNameError("obs"); __PYX_ERR(0, 2734, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_obs, __pyx_cur_scope->__pyx_v_obs) < 0) __PYX_ERR(0, 2732, __pyx_L1_error)
+2735:                               fltr=fltr, Tf=Tf, obs0=obs0, tangent=tangent,
  if (unlikely(!__pyx_cur_scope->__pyx_v_fltr)) { __Pyx_RaiseClosureNameError("fltr"); __PYX_ERR(0, 2735, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_fltr, __pyx_cur_scope->__pyx_v_fltr) < 0) __PYX_ERR(0, 2732, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_v_Tf)) { __Pyx_RaiseClosureNameError("Tf"); __PYX_ERR(0, 2735, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_Tf, __pyx_cur_scope->__pyx_v_Tf) < 0) __PYX_ERR(0, 2732, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_v_obs0)) { __Pyx_RaiseClosureNameError("obs0"); __PYX_ERR(0, 2735, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_obs0, __pyx_cur_scope->__pyx_v_obs0) < 0) __PYX_ERR(0, 2732, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_v_tangent)) { __Pyx_RaiseClosureNameError("tangent"); __PYX_ERR(0, 2735, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_tangent, __pyx_cur_scope->__pyx_v_tangent) < 0) __PYX_ERR(0, 2732, __pyx_L1_error)
+2736:                               inter_steps=inter_steps,
  if (unlikely(!__pyx_cur_scope->__pyx_v_inter_steps)) { __Pyx_RaiseClosureNameError("inter_steps"); __PYX_ERR(0, 2736, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_inter_steps, __pyx_cur_scope->__pyx_v_inter_steps) < 0) __PYX_ERR(0, 2732, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_4;
  __pyx_t_4 = 0;
+2737:                               **kwargs)
  if (unlikely(!__pyx_cur_scope->__pyx_v_kwargs)) { __Pyx_RaiseClosureNameError("kwargs"); __PYX_ERR(0, 2737, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_v_kwargs == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
    __PYX_ERR(0, 2737, __pyx_L1_error)
  }
  if (__Pyx_MergeKeywords(__pyx_t_3, __pyx_cur_scope->__pyx_v_kwargs) < 0) __PYX_ERR(0, 2737, __pyx_L1_error)
 2738: 
+2739:         if np.all(eps == None):
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_all); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_eps, Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2739, __pyx_L1_error)
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 2739, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_9) {
/* … */
    goto __pyx_L8;
  }
+2740:             xx = infer_result_loc['flat_params']
    __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result_loc, __pyx_n_u_flat_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2740, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_xx = __pyx_t_1;
    __pyx_t_1 = 0;
+2741:             fx = abs(infer_result_loc['log_likelihood'])
    __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result_loc, __pyx_n_u_log_likelihood); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2741, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyNumber_Absolute(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2741, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_fx = __pyx_t_5;
    __pyx_t_5 = 0;
+2742:             eps = 100 * xx * np.divide(np.spacing(fx),fx)**(0.25)
    __pyx_t_5 = PyNumber_Multiply(__pyx_int_100, __pyx_v_xx); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_divide); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_spacing); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
      }
    }
    __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_6, __pyx_v_fx) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_fx);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_4 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_t_3, __pyx_v_fx};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2742, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_t_3, __pyx_v_fx};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2742, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2742, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_11) {
        __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_11); __pyx_t_11 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_4, __pyx_t_3);
      __Pyx_INCREF(__pyx_v_fx);
      __Pyx_GIVEREF(__pyx_v_fx);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_4, __pyx_v_fx);
      __pyx_t_3 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2742, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyNumber_Power(__pyx_t_1, __pyx_float_0_25, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Multiply(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_eps, __pyx_t_1);
    __pyx_t_1 = 0;
 2743:             #eps = 10.*np.spacing(flat_params)**np.divide(1,3)
+2744:         elif np.isscalar(eps):
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2744, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_isscalar); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2744, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_v_eps) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_eps);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2744, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 2744, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_9) {
/* … */
  }
  __pyx_L8:;
+2745:             eps = np.repeat(eps, repeats=len(flat_params))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2745, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_repeat); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2745, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2745, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_eps);
    __Pyx_GIVEREF(__pyx_v_eps);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_eps);
    __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2745, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_10 = PyObject_Length(__pyx_v_flat_params); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2745, __pyx_L1_error)
    __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2745, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_repeats, __pyx_t_6) < 0) __PYX_ERR(0, 2745, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2745, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_eps, __pyx_t_6);
    __pyx_t_6 = 0;
+2746:         print('eps-vector used for differentiation: ', eps)
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2746, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_kp_u_eps_vector_used_for_differentiat);
  __Pyx_GIVEREF(__pyx_kp_u_eps_vector_used_for_differentiat);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_u_eps_vector_used_for_differentiat);
  __Pyx_INCREF(__pyx_v_eps);
  __Pyx_GIVEREF(__pyx_v_eps);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_eps);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2746, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 2747: 
+2748:         cov = covariance(flat_params)
  __pyx_t_2 = __pyx_pf_6pyross_9inference_8SIR_type_10latent_FIM_2covariance(__pyx_v_covariance, __pyx_v_flat_params); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_cov = __pyx_t_2;
  __pyx_t_2 = 0;
+2749:         invcov = np.linalg.inv(cov)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_linalg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_inv); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_1, __pyx_v_cov) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_cov);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_invcov = __pyx_t_2;
  __pyx_t_2 = 0;
 2750: 
+2751:         dim = len(flat_params)
  __pyx_t_10 = PyObject_Length(__pyx_v_flat_params); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2751, __pyx_L1_error)
  __pyx_v_dim = __pyx_t_10;
+2752:         FIM = np.empty((dim,dim))
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2752, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2752, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2752, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2752, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2752, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
  __pyx_t_6 = 0;
  __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2752, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_FIM = __pyx_t_2;
  __pyx_t_2 = 0;
+2753:         dmu = []
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2753, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_dmu = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+2754:         dcov = []
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2754, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_dcov = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
 2755: 
+2756:         for i in range(dim):
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_10 = 0;
    __pyx_t_12 = NULL;
  } else {
    __pyx_t_10 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2756, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_12 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2756, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_12)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 2756, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2756, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 2756, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2756, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_12(__pyx_t_2);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 2756, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+2757:             dmu.append(pyross.utils.partial_derivative(mean, var=i, point=flat_params, dx=eps[i]))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyross); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2757, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_utils); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2757, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_partial_derivative); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2757, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2757, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_mean);
    __Pyx_GIVEREF(__pyx_v_mean);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_mean);
    __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2757, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_var, __pyx_v_i) < 0) __PYX_ERR(0, 2757, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_point, __pyx_v_flat_params) < 0) __PYX_ERR(0, 2757, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_eps, __pyx_v_i); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2757, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dx, __pyx_t_6) < 0) __PYX_ERR(0, 2757, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2757, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_dmu, __pyx_t_6); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 2757, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+2758:             dcov.append(pyross.utils.partial_derivative(covariance,  var=i, point=flat_params, dx=eps[i]))
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyross); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_partial_derivative); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v_covariance);
    __Pyx_GIVEREF(__pyx_v_covariance);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_covariance);
    __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_var, __pyx_v_i) < 0) __PYX_ERR(0, 2758, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_point, __pyx_v_flat_params) < 0) __PYX_ERR(0, 2758, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_eps, __pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dx, __pyx_t_1) < 0) __PYX_ERR(0, 2758, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_dcov, __pyx_t_1); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 2758, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2759: 
+2760:         for i in range(dim):
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2760, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2760, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_10 = 0;
    __pyx_t_12 = NULL;
  } else {
    __pyx_t_10 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2760, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_12 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2760, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_12)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 2760, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2760, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 2760, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2760, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_12(__pyx_t_2);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 2760, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+2761:             t1 = dmu[i]@invcov@dmu[i]
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_dmu, __pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_1, __pyx_v_invcov); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_dmu, __pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_t1, __pyx_t_5);
    __pyx_t_5 = 0;
+2762:             t2 = np.multiply(0.5,np.trace(invcov@dcov[i]@invcov@dcov[i]))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2762, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multiply); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2762, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2762, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_trace); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2762, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_dcov, __pyx_v_i); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2762, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_14 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_invcov, __pyx_t_6); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2762, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_14, __pyx_v_invcov); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2762, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_v_dcov, __pyx_v_i); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2762, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_15 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_6, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2762, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_14 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
      }
    }
    __pyx_t_1 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_14, __pyx_t_15) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_15);
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2762, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_4 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_float_0_5, __pyx_t_1};
      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2762, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_float_0_5, __pyx_t_1};
      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2762, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    {
      __pyx_t_15 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2762, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      if (__pyx_t_11) {
        __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_11); __pyx_t_11 = NULL;
      }
      __Pyx_INCREF(__pyx_float_0_5);
      __Pyx_GIVEREF(__pyx_float_0_5);
      PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_4, __pyx_float_0_5);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_4, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_15, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2762, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF_SET(__pyx_v_t2, __pyx_t_5);
    __pyx_t_5 = 0;
+2763:             FIM[i,i] = t1 + t2
    __pyx_t_5 = PyNumber_Add(__pyx_v_t1, __pyx_v_t2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2763, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2763, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_i);
    __Pyx_INCREF(__pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_i);
    if (unlikely(PyObject_SetItem(__pyx_v_FIM, __pyx_t_3, __pyx_t_5) < 0)) __PYX_ERR(0, 2763, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 2764: 
+2765:         rows,cols = np.triu_indices(dim,1)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2765, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_triu_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2765, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2765, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_15 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_15)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_15);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_15, __pyx_t_5, __pyx_int_1};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2765, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_15, __pyx_t_5, __pyx_int_1};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2765, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  {
    __pyx_t_1 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (__pyx_t_15) {
      __Pyx_GIVEREF(__pyx_t_15); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_15); __pyx_t_15 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_4, __pyx_t_5);
    __Pyx_INCREF(__pyx_int_1);
    __Pyx_GIVEREF(__pyx_int_1);
    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_4, __pyx_int_1);
    __pyx_t_5 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2765, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_1);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L13_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_1 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_1)) goto __pyx_L13_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_5), 2) < 0) __PYX_ERR(0, 2765, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L14_unpacking_done;
    __pyx_L13_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2765, __pyx_L1_error)
    __pyx_L14_unpacking_done:;
  }
  __pyx_v_rows = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_cols = __pyx_t_1;
  __pyx_t_1 = 0;
 2766: 
+2767:         for i,j in zip(rows,cols):
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2767, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_rows);
  __Pyx_GIVEREF(__pyx_v_rows);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_rows);
  __Pyx_INCREF(__pyx_v_cols);
  __Pyx_GIVEREF(__pyx_v_cols);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_cols);
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2767, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_10 = 0;
    __pyx_t_12 = NULL;
  } else {
    __pyx_t_10 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_12 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2767, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_12)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 2767, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2767, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 2767, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2767, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_12(__pyx_t_2);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 2767, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
      PyObject* sequence = __pyx_t_1;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 2767, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      #else
      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2767, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2767, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_15 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2767, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_7 = Py_TYPE(__pyx_t_15)->tp_iternext;
      index = 0; __pyx_t_3 = __pyx_t_7(__pyx_t_15); if (unlikely(!__pyx_t_3)) goto __pyx_L17_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_15); if (unlikely(!__pyx_t_5)) goto __pyx_L17_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_15), 2) < 0) __PYX_ERR(0, 2767, __pyx_L1_error)
      __pyx_t_7 = NULL;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      goto __pyx_L18_unpacking_done;
      __pyx_L17_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __pyx_t_7 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 2767, __pyx_L1_error)
      __pyx_L18_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_5);
    __pyx_t_5 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+2768:             t1 = dmu[i]@invcov@dmu[j]
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_dmu, __pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_1, __pyx_v_invcov); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_dmu, __pyx_v_j); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_t1, __pyx_t_3);
    __pyx_t_3 = 0;
+2769:             t2 = np.multiply(0.5,np.trace(invcov@dcov[i]@invcov@dcov[j]))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multiply); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_trace); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_15 = __Pyx_PyObject_GetItem(__pyx_v_dcov, __pyx_v_i); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_14 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_invcov, __pyx_t_15); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_15 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_14, __pyx_v_invcov); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_v_dcov, __pyx_v_j); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_6 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_15, __pyx_t_14); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_14 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
      }
    }
    __pyx_t_1 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_14, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_4 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_float_0_5, __pyx_t_1};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2769, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_float_0_5, __pyx_t_1};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2769, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2769, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_11) {
        __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_11); __pyx_t_11 = NULL;
      }
      __Pyx_INCREF(__pyx_float_0_5);
      __Pyx_GIVEREF(__pyx_float_0_5);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_4, __pyx_float_0_5);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_4, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2769, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF_SET(__pyx_v_t2, __pyx_t_3);
    __pyx_t_3 = 0;
+2770:             FIM[i,j] = t1 + t2
    __pyx_t_3 = PyNumber_Add(__pyx_v_t1, __pyx_v_t2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2770, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2770, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_i);
    __Pyx_INCREF(__pyx_v_j);
    __Pyx_GIVEREF(__pyx_v_j);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_j);
    if (unlikely(PyObject_SetItem(__pyx_v_FIM, __pyx_t_5, __pyx_t_3) < 0)) __PYX_ERR(0, 2770, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 2771: 
+2772:         i_lower = np.tril_indices(dim,-1)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_tril_indices); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_3, __pyx_int_neg_1};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2772, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_3, __pyx_int_neg_1};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2772, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_1 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2772, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_4, __pyx_t_3);
    __Pyx_INCREF(__pyx_int_neg_1);
    __Pyx_GIVEREF(__pyx_int_neg_1);
    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_4, __pyx_int_neg_1);
    __pyx_t_3 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2772, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_i_lower = __pyx_t_2;
  __pyx_t_2 = 0;
+2773:         FIM[i_lower] = FIM.T[i_lower]
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_FIM, __pyx_n_s_T); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2773, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_v_i_lower); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2773, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(PyObject_SetItem(__pyx_v_FIM, __pyx_v_i_lower, __pyx_t_5) < 0)) __PYX_ERR(0, 2773, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+2774:         return FIM
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_FIM);
  __pyx_r = __pyx_v_FIM;
  goto __pyx_L0;
 2775: 
+2776:     def latent_FIM_det(self, obs, fltr, Tf, infer_result,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_89latent_FIM_det(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_88latent_FIM_det[] = "\n        Computes the Fisher Information Matrix (FIM) of the deterministic model (ODE based, including a constant measurement error) for the initial conditions and all desired parameters, including control parameters, for a SIR type model with partially observed classes. The unobserved classes are treated as latent variables.\n\n        Parameters\n        ----------\n        obs:  np.array\n            The partially observed trajectory.\n        fltr: 2d np.array\n            The filter for the observation such that\n            :math:`F_{ij} x_j (t) = obs_i(t)`\n        Tf: float\n            Total time of the trajectory\n        infer_result: dict\n            Dictionary returned by latent_infer\n        contactMatrix: callable, optional\n            A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.\n            Either a contactMatrix or a generator must be specified.\n        generator: pyross.contactMatrix, optional\n            A pyross.contactMatrix object that generates a contact matrix function with specified lockdown\n            parameters.\n            Either a contactMatrix or a generator must be specified.\n        intervention_fun: callable, optional\n            The calling signature is `intervention_func(t, **kwargs)`,\n            where t is time and kwargs are other keyword arguments for the function.\n            The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.\n            The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.\n            If not set, assume intervention that's constant in time.\n            See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.\n        eps: float or numpy.array, optional\n            Step size for numerical differentiation of the process mean and its full covariance matrix with \n            respect to the parameters. Must be either a scalar, or an array of length `len""(infer_result['flat_params'])`. \n            If not specified, \n            \n            .. code-block:: python\n\n               eps = 100*infer_result['flat_params'] \n                     *numpy.divide(numpy.spacing(infer_result['log_likelihood']),\n                     infer_result['log_likelihood'])**(0.25) \n\n            is used. It is recommended to use a step-size greater or equal to `eps`. Decreasing the step size too small can result in round-off error.\n        measurement_error: float, optional\n            Standard deviation of measurements (uniform and independent Gaussian measurement error assumed). Default is 1e-2.\n        inter_steps: int, optional\n            Intermediate steps between observations for the deterministic forward Euler integration. \n            A higher number of intermediate steps will improve the accuracy of the result, but will \n            make computations slower. Setting inter_steps=0 will fall back to the method accessible via \n            det_method for the deterministic integration. We have found that forward Euler is generally slower, \n            but more stable for derivatives with respect to parameters than the variable step size integrators \n            used elsewhere in pyross. Default is 100.\n\n        Returns\n        -------\n        FIM_det: 2d numpy.array\n            The Fisher Information Matrix\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_89latent_FIM_det(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_obs = 0;
  PyObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_infer_result = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_eps = 0;
  PyObject *__pyx_v_measurement_error = 0;
  PyObject *__pyx_v_inter_steps = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_FIM_det (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_infer_result,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_eps,&__pyx_n_s_measurement_error,&__pyx_n_s_inter_steps,0};
    PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_88latent_FIM_det(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_obs, PyObject *__pyx_v_fltr, PyObject *__pyx_v_Tf, PyObject *__pyx_v_infer_result, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_eps, PyObject *__pyx_v_measurement_error, PyObject *__pyx_v_inter_steps) {
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_4_latent_FIM_det *__pyx_cur_scope;
  PyObject *__pyx_v_infer_result_loc = NULL;
  PyObject *__pyx_v_flat_params = NULL;
  PyObject *__pyx_v_key = NULL;
  PyObject *__pyx_v_mean = 0;
  PyObject *__pyx_v_xx = NULL;
  PyObject *__pyx_v_fx = NULL;
  PyObject *__pyx_v_fltr_ = NULL;
  PyObject *__pyx_v_sigma_sq = NULL;
  PyObject *__pyx_v_cov_diag = NULL;
  PyObject *__pyx_v_cov = NULL;
  PyObject *__pyx_v_full_fltr = NULL;
  PyObject *__pyx_v_cov_red = NULL;
  PyObject *__pyx_v_invcov = NULL;
  Py_ssize_t __pyx_v_dim;
  PyObject *__pyx_v_FIM_det = NULL;
  PyObject *__pyx_v_dmu = NULL;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_rows = NULL;
  PyObject *__pyx_v_cols = NULL;
  PyObject *__pyx_v_j = NULL;
  PyObject *__pyx_v_i_lower = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_FIM_det", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pyross_9inference___pyx_scope_struct_4_latent_FIM_det *)__pyx_tp_new_6pyross_9inference___pyx_scope_struct_4_latent_FIM_det(__pyx_ptype_6pyross_9inference___pyx_scope_struct_4_latent_FIM_det, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pyross_9inference___pyx_scope_struct_4_latent_FIM_det *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 2776, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_obs = __pyx_v_obs;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_obs);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_obs);
  __pyx_cur_scope->__pyx_v_fltr = __pyx_v_fltr;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_fltr);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_fltr);
  __pyx_cur_scope->__pyx_v_Tf = __pyx_v_Tf;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_Tf);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_Tf);
  __pyx_cur_scope->__pyx_v_contactMatrix = __pyx_v_contactMatrix;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_contactMatrix);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_contactMatrix);
  __pyx_cur_scope->__pyx_v_generator = __pyx_v_generator;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_generator);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_generator);
  __pyx_cur_scope->__pyx_v_intervention_fun = __pyx_v_intervention_fun;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_intervention_fun);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_intervention_fun);
  __pyx_cur_scope->__pyx_v_inter_steps = __pyx_v_inter_steps;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_inter_steps);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_inter_steps);
  __Pyx_INCREF(__pyx_v_eps);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_FIM_det", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_infer_result_loc);
  __Pyx_XDECREF(__pyx_v_flat_params);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_mean);
  __Pyx_XDECREF(__pyx_v_xx);
  __Pyx_XDECREF(__pyx_v_fx);
  __Pyx_XDECREF(__pyx_v_fltr_);
  __Pyx_XDECREF(__pyx_v_sigma_sq);
  __Pyx_XDECREF(__pyx_v_cov_diag);
  __Pyx_XDECREF(__pyx_v_cov);
  __Pyx_XDECREF(__pyx_v_full_fltr);
  __Pyx_XDECREF(__pyx_v_cov_red);
  __Pyx_XDECREF(__pyx_v_invcov);
  __Pyx_XDECREF(__pyx_v_FIM_det);
  __Pyx_XDECREF(__pyx_v_dmu);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_rows);
  __Pyx_XDECREF(__pyx_v_cols);
  __Pyx_XDECREF(__pyx_v_j);
  __Pyx_XDECREF(__pyx_v_i_lower);
  __Pyx_XDECREF(__pyx_v_eps);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_obj_6pyross_9inference___pyx_scope_struct_4_latent_FIM_det {
  PyObject_HEAD
  PyObject *__pyx_v_Tf;
  PyObject *__pyx_v_contactMatrix;
  PyObject *__pyx_v_fltr;
  PyObject *__pyx_v_generator;
  PyObject *__pyx_v_inter_steps;
  PyObject *__pyx_v_intervention_fun;
  PyObject *__pyx_v_kwargs;
  PyObject *__pyx_v_obs;
  PyObject *__pyx_v_obs0;
  struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self;
};

+2777:                        contactMatrix=None, generator=None,
    values[4] = ((PyObject *)Py_None);
    values[5] = ((PyObject *)Py_None);
+2778:                        intervention_fun=None,
    values[6] = ((PyObject *)Py_None);
+2779:                        eps=None, measurement_error=1e-2, inter_steps=100):
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)__pyx_float_1eneg_2);
    values[9] = ((PyObject *)__pyx_int_100);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_FIM_det", 0, 4, 10, 1); __PYX_ERR(0, 2776, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_FIM_det", 0, 4, 10, 2); __PYX_ERR(0, 2776, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_infer_result)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_FIM_det", 0, 4, 10, 3); __PYX_ERR(0, 2776, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_measurement_error);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[9] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "latent_FIM_det") < 0)) __PYX_ERR(0, 2776, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obs = values[0];
    __pyx_v_fltr = values[1];
    __pyx_v_Tf = values[2];
    __pyx_v_infer_result = values[3];
    __pyx_v_contactMatrix = values[4];
    __pyx_v_generator = values[5];
    __pyx_v_intervention_fun = values[6];
    __pyx_v_eps = values[7];
    __pyx_v_measurement_error = values[8];
    __pyx_v_inter_steps = values[9];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("latent_FIM_det", 0, 4, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2776, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_FIM_det", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_88latent_FIM_det(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_eps, __pyx_v_measurement_error, __pyx_v_inter_steps);
 2780:         """
 2781:         Computes the Fisher Information Matrix (FIM) of the deterministic model (ODE based, including a constant measurement error) for the initial conditions and all desired parameters, including control parameters, for a SIR type model with partially observed classes. The unobserved classes are treated as latent variables.
 2782: 
 2783:         Parameters
 2784:         ----------
 2785:         obs:  np.array
 2786:             The partially observed trajectory.
 2787:         fltr: 2d np.array
 2788:             The filter for the observation such that
 2789:             :math:`F_{ij} x_j (t) = obs_i(t)`
 2790:         Tf: float
 2791:             Total time of the trajectory
 2792:         infer_result: dict
 2793:             Dictionary returned by latent_infer
 2794:         contactMatrix: callable, optional
 2795:             A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.
 2796:             Either a contactMatrix or a generator must be specified.
 2797:         generator: pyross.contactMatrix, optional
 2798:             A pyross.contactMatrix object that generates a contact matrix function with specified lockdown
 2799:             parameters.
 2800:             Either a contactMatrix or a generator must be specified.
 2801:         intervention_fun: callable, optional
 2802:             The calling signature is `intervention_func(t, **kwargs)`,
 2803:             where t is time and kwargs are other keyword arguments for the function.
 2804:             The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.
 2805:             The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.
 2806:             If not set, assume intervention that's constant in time.
 2807:             See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.
 2808:         eps: float or numpy.array, optional
 2809:             Step size for numerical differentiation of the process mean and its full covariance matrix with 
 2810:             respect to the parameters. Must be either a scalar, or an array of length `len(infer_result['flat_params'])`. 
 2811:             If not specified, 
 2812:             
 2813:             .. code-block:: python
 2814: 
 2815:                eps = 100*infer_result['flat_params'] 
 2816:                      *numpy.divide(numpy.spacing(infer_result['log_likelihood']),
 2817:                      infer_result['log_likelihood'])**(0.25) 
 2818: 
 2819:             is used. It is recommended to use a step-size greater or equal to `eps`. Decreasing the step size too small can result in round-off error.
 2820:         measurement_error: float, optional
 2821:             Standard deviation of measurements (uniform and independent Gaussian measurement error assumed). Default is 1e-2.
 2822:         inter_steps: int, optional
 2823:             Intermediate steps between observations for the deterministic forward Euler integration. 
 2824:             A higher number of intermediate steps will improve the accuracy of the result, but will 
 2825:             make computations slower. Setting inter_steps=0 will fall back to the method accessible via 
 2826:             det_method for the deterministic integration. We have found that forward Euler is generally slower, 
 2827:             but more stable for derivatives with respect to parameters than the variable step size integrators 
 2828:             used elsewhere in pyross. Default is 100.
 2829: 
 2830:         Returns
 2831:         -------
 2832:         FIM_det: 2d numpy.array
 2833:             The Fisher Information Matrix
 2834:         """
 2835: 
 2836: 
 2837: 
 2838:         # Sanity checks of the inputs
+2839:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2839, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_contactMatrix, __pyx_cur_scope->__pyx_v_generator, __pyx_cur_scope->__pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2839, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_contactMatrix, __pyx_cur_scope->__pyx_v_generator, __pyx_cur_scope->__pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2839, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2839, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_cur_scope->__pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_cur_scope->__pyx_v_generator);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_cur_scope->__pyx_v_intervention_fun);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2839, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2840: 
 2841:         # Process fltr and obs
+2842:         fltr, obs, obs0 = pyross.utils.process_latent_data(fltr, obs)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_process_latent_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_cur_scope->__pyx_v_fltr, __pyx_cur_scope->__pyx_v_obs};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2842, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_cur_scope->__pyx_v_fltr, __pyx_cur_scope->__pyx_v_obs};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2842, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_3 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2842, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_fltr);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_fltr);
    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_4, __pyx_cur_scope->__pyx_v_fltr);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_obs);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_obs);
    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_4, __pyx_cur_scope->__pyx_v_obs);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2842, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2842, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_5);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2842, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2842, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2842, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2842, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 2; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 3) < 0) __PYX_ERR(0, 2842, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2842, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_fltr);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_fltr, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_obs);
  __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_obs, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_cur_scope->__pyx_v_obs0 = __pyx_t_5;
  __pyx_t_5 = 0;
 2843: 
+2844:         infer_result_loc = infer_result.copy()
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_infer_result, __pyx_n_s_copy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2844, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2844, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_infer_result_loc = __pyx_t_1;
  __pyx_t_1 = 0;
 2845:         # backwards compatibility
+2846:         if 'flat_map' in infer_result_loc:
  __pyx_t_8 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_flat_map, __pyx_v_infer_result_loc, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 2846, __pyx_L1_error)
  __pyx_t_9 = (__pyx_t_8 != 0);
  if (__pyx_t_9) {
/* … */
  }
+2847:             infer_result_loc['flat_params'] = infer_result_loc.pop('flat_map')
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_infer_result_loc, __pyx_n_s_pop); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2847, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_n_u_flat_map) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_n_u_flat_map);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2847, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_infer_result_loc, __pyx_n_u_flat_params, __pyx_t_1) < 0)) __PYX_ERR(0, 2847, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2848: 
+2849:         flat_params = np.copy(infer_result_loc['flat_params'])
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2849, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2849, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result_loc, __pyx_n_u_flat_params); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2849, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2849, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_flat_params = __pyx_t_1;
  __pyx_t_1 = 0;
+2850:         kwargs = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2850, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_kwargs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+2851:         for key in ['param_keys', 'param_guess_range', 'is_scale_parameter',
  __pyx_t_1 = __pyx_tuple__22; __Pyx_INCREF(__pyx_t_1); __pyx_t_10 = 0;
  for (;;) {
    if (__pyx_t_10 >= 7) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 2851, __pyx_L1_error)
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2851, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_key, ((PyObject*)__pyx_t_3));
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2852:                     'scaled_param_guesses', 'param_length', 'init_flags',
 2853:                     'init_fltrs']:
+2854:             kwargs[key] = infer_result_loc[key]
    __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result_loc, __pyx_v_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2854, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_kwargs, __pyx_v_key, __pyx_t_3) < 0)) __PYX_ERR(0, 2854, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 2855: 
+2856:         def mean(y):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_14latent_FIM_det_1mean(PyObject *__pyx_self, PyObject *__pyx_v_y); /*proto*/
static PyMethodDef __pyx_mdef_6pyross_9inference_8SIR_type_14latent_FIM_det_1mean = {"mean", (PyCFunction)__pyx_pw_6pyross_9inference_8SIR_type_14latent_FIM_det_1mean, METH_O, 0};
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_14latent_FIM_det_1mean(PyObject *__pyx_self, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mean (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_14latent_FIM_det_mean(__pyx_self, ((PyObject *)__pyx_v_y));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_14latent_FIM_det_mean(PyObject *__pyx_self, PyObject *__pyx_v_y) {
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_4_latent_FIM_det *__pyx_cur_scope;
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_4_latent_FIM_det *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mean", 0);
  __pyx_outer_scope = (struct __pyx_obj_6pyross_9inference___pyx_scope_struct_4_latent_FIM_det *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_FIM_det.mean", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__27 = PyTuple_Pack(1, __pyx_n_s_y); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 2856, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__27);
  __Pyx_GIVEREF(__pyx_tuple__27);
/* … */
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6pyross_9inference_8SIR_type_14latent_FIM_det_1mean, 0, __pyx_n_s_latent_FIM_det_locals_mean, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pyross_inference, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2856, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_mean = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyross_inference_pyx, __pyx_n_s_mean_2, 2856, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 2856, __pyx_L1_error)
+2857:             return self._latent_mean(y, contactMatrix=contactMatrix,
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 2857, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_latent_mean); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2857, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2857, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_y);
  __Pyx_GIVEREF(__pyx_v_y);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2857, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(!__pyx_cur_scope->__pyx_v_contactMatrix)) { __Pyx_RaiseClosureNameError("contactMatrix"); __PYX_ERR(0, 2857, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_contactMatrix, __pyx_cur_scope->__pyx_v_contactMatrix) < 0) __PYX_ERR(0, 2857, __pyx_L1_error)
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2857, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
+2858:                                       generator=generator,
  if (unlikely(!__pyx_cur_scope->__pyx_v_generator)) { __Pyx_RaiseClosureNameError("generator"); __PYX_ERR(0, 2858, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_generator, __pyx_cur_scope->__pyx_v_generator) < 0) __PYX_ERR(0, 2857, __pyx_L1_error)
+2859:                               intervention_fun=intervention_fun, obs=obs,
  if (unlikely(!__pyx_cur_scope->__pyx_v_intervention_fun)) { __Pyx_RaiseClosureNameError("intervention_fun"); __PYX_ERR(0, 2859, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_intervention_fun, __pyx_cur_scope->__pyx_v_intervention_fun) < 0) __PYX_ERR(0, 2857, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_v_obs)) { __Pyx_RaiseClosureNameError("obs"); __PYX_ERR(0, 2859, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_obs, __pyx_cur_scope->__pyx_v_obs) < 0) __PYX_ERR(0, 2857, __pyx_L1_error)
+2860:                               fltr=fltr, Tf=Tf, obs0=obs0,
  if (unlikely(!__pyx_cur_scope->__pyx_v_fltr)) { __Pyx_RaiseClosureNameError("fltr"); __PYX_ERR(0, 2860, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_fltr, __pyx_cur_scope->__pyx_v_fltr) < 0) __PYX_ERR(0, 2857, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_v_Tf)) { __Pyx_RaiseClosureNameError("Tf"); __PYX_ERR(0, 2860, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_Tf, __pyx_cur_scope->__pyx_v_Tf) < 0) __PYX_ERR(0, 2857, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_v_obs0)) { __Pyx_RaiseClosureNameError("obs0"); __PYX_ERR(0, 2860, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_obs0, __pyx_cur_scope->__pyx_v_obs0) < 0) __PYX_ERR(0, 2857, __pyx_L1_error)
+2861:                               inter_steps=inter_steps,
  if (unlikely(!__pyx_cur_scope->__pyx_v_inter_steps)) { __Pyx_RaiseClosureNameError("inter_steps"); __PYX_ERR(0, 2861, __pyx_L1_error) }
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_inter_steps, __pyx_cur_scope->__pyx_v_inter_steps) < 0) __PYX_ERR(0, 2857, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_4;
  __pyx_t_4 = 0;
+2862:                               **kwargs)
  if (unlikely(!__pyx_cur_scope->__pyx_v_kwargs)) { __Pyx_RaiseClosureNameError("kwargs"); __PYX_ERR(0, 2862, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_v_kwargs == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
    __PYX_ERR(0, 2862, __pyx_L1_error)
  }
  if (__Pyx_MergeKeywords(__pyx_t_3, __pyx_cur_scope->__pyx_v_kwargs) < 0) __PYX_ERR(0, 2862, __pyx_L1_error)
 2863: 
+2864:         if np.all(eps == None):
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2864, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_all); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2864, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_eps, Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2864, __pyx_L1_error)
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2864, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 2864, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_9) {
/* … */
    goto __pyx_L8;
  }
+2865:             xx = infer_result_loc['flat_params']
    __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result_loc, __pyx_n_u_flat_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2865, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_xx = __pyx_t_1;
    __pyx_t_1 = 0;
+2866:             fx = abs(infer_result_loc['log_likelihood'])
    __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result_loc, __pyx_n_u_log_likelihood); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2866, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyNumber_Absolute(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2866, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_fx = __pyx_t_5;
    __pyx_t_5 = 0;
+2867:             eps = 100 * xx * np.divide(np.spacing(fx),fx)**(0.25)
    __pyx_t_5 = PyNumber_Multiply(__pyx_int_100, __pyx_v_xx); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_divide); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_spacing); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
      }
    }
    __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_6, __pyx_v_fx) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_fx);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_4 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_t_3, __pyx_v_fx};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2867, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_t_3, __pyx_v_fx};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2867, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2867, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_11) {
        __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_11); __pyx_t_11 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_4, __pyx_t_3);
      __Pyx_INCREF(__pyx_v_fx);
      __Pyx_GIVEREF(__pyx_v_fx);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_4, __pyx_v_fx);
      __pyx_t_3 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2867, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyNumber_Power(__pyx_t_1, __pyx_float_0_25, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Multiply(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_eps, __pyx_t_1);
    __pyx_t_1 = 0;
 2868:             #eps = 10.*np.spacing(flat_params)**np.divide(1,3)
+2869:         elif np.isscalar(eps):
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2869, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_isscalar); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2869, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_v_eps) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_eps);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2869, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 2869, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_9) {
/* … */
  }
  __pyx_L8:;
+2870:             eps = np.repeat(eps, repeats=len(flat_params))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2870, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_repeat); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2870, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2870, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_eps);
    __Pyx_GIVEREF(__pyx_v_eps);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_eps);
    __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2870, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_10 = PyObject_Length(__pyx_v_flat_params); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2870, __pyx_L1_error)
    __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2870, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_repeats, __pyx_t_6) < 0) __PYX_ERR(0, 2870, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2870, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_eps, __pyx_t_6);
    __pyx_t_6 = 0;
+2871:         print('eps-vector used for differentiation: ', eps)
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2871, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_kp_u_eps_vector_used_for_differentiat);
  __Pyx_GIVEREF(__pyx_kp_u_eps_vector_used_for_differentiat);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_u_eps_vector_used_for_differentiat);
  __Pyx_INCREF(__pyx_v_eps);
  __Pyx_GIVEREF(__pyx_v_eps);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_eps);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2871, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 2872: 
+2873:         fltr_ = fltr[1:]
  __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_cur_scope->__pyx_v_fltr, 1, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2873, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_fltr_ = __pyx_t_2;
  __pyx_t_2 = 0;
+2874:         sigma_sq = measurement_error*measurement_error
  __pyx_t_2 = PyNumber_Multiply(__pyx_v_measurement_error, __pyx_v_measurement_error); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2874, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_sigma_sq = __pyx_t_2;
  __pyx_t_2 = 0;
+2875:         cov_diag = np.repeat(sigma_sq, repeats=(int(self.dim)*(fltr_.shape[0])))
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2875, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_repeat); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2875, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2875, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_sigma_sq);
  __Pyx_GIVEREF(__pyx_v_sigma_sq);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_sigma_sq);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2875, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_cur_scope->__pyx_v_self->dim); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2875, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyInt_Type)), __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2875, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_fltr_, __pyx_n_s_shape); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2875, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_5, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2875, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2875, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_repeats, __pyx_t_5) < 0) __PYX_ERR(0, 2875, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2875, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_cov_diag = __pyx_t_5;
  __pyx_t_5 = 0;
+2876:         cov = np.diag(cov_diag)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_diag); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_v_cov_diag) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_cov_diag);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_cov = __pyx_t_5;
  __pyx_t_5 = 0;
+2877:         full_fltr = sparse.block_diag(fltr_)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_sparse); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_block_diag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_v_fltr_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_fltr_);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_full_fltr = __pyx_t_5;
  __pyx_t_5 = 0;
+2878:         cov_red = full_fltr@cov@np.transpose(full_fltr)
  __pyx_t_5 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_full_fltr, __pyx_v_cov); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_transpose); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_v_full_fltr) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_full_fltr);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_cov_red = __pyx_t_6;
  __pyx_t_6 = 0;
+2879:         invcov = np.linalg.inv(cov_red)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2879, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_linalg); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2879, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_inv); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2879, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_6 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v_cov_red) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_cov_red);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2879, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_invcov = __pyx_t_6;
  __pyx_t_6 = 0;
 2880: 
+2881:         dim = len(flat_params)
  __pyx_t_10 = PyObject_Length(__pyx_v_flat_params); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2881, __pyx_L1_error)
  __pyx_v_dim = __pyx_t_10;
+2882:         FIM_det = np.empty((dim,dim))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_6 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_11);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_FIM_det = __pyx_t_6;
  __pyx_t_6 = 0;
+2883:         dmu = []
  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2883, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_dmu = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;
 2884: 
+2885:         for i in range(dim):
  __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2885, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2885, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
    __pyx_t_6 = __pyx_t_5; __Pyx_INCREF(__pyx_t_6); __pyx_t_10 = 0;
    __pyx_t_12 = NULL;
  } else {
    __pyx_t_10 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2885, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_12 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2885, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  for (;;) {
    if (likely(!__pyx_t_12)) {
      if (likely(PyList_CheckExact(__pyx_t_6))) {
        if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_6)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_5); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 2885, __pyx_L1_error)
        #else
        __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2885, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
      } else {
        if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_5); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 2885, __pyx_L1_error)
        #else
        __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2885, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
      }
    } else {
      __pyx_t_5 = __pyx_t_12(__pyx_t_6);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 2885, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_5);
    __pyx_t_5 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+2886:             dmu.append(pyross.utils.partial_derivative(mean, var=i, point=flat_params, dx=eps[i]))
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyross); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2886, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_utils); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2886, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_partial_derivative); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2886, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2886, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_v_mean);
    __Pyx_GIVEREF(__pyx_v_mean);
    PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_mean);
    __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2886, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_var, __pyx_v_i) < 0) __PYX_ERR(0, 2886, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_point, __pyx_v_flat_params) < 0) __PYX_ERR(0, 2886, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_eps, __pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2886, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dx, __pyx_t_1) < 0) __PYX_ERR(0, 2886, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_11, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2886, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_dmu, __pyx_t_1); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 2886, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2887: 
+2888:         for i in range(dim):
  __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_6 = __pyx_t_1; __Pyx_INCREF(__pyx_t_6); __pyx_t_10 = 0;
    __pyx_t_12 = NULL;
  } else {
    __pyx_t_10 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2888, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_12 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2888, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_12)) {
      if (likely(PyList_CheckExact(__pyx_t_6))) {
        if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_6)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 2888, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2888, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 2888, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2888, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_12(__pyx_t_6);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 2888, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+2889:             FIM_det[i,i] = dmu[i]@invcov@dmu[i]
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_dmu, __pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2889, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_1, __pyx_v_invcov); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2889, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_dmu, __pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2889, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_11 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2889, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2889, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_i);
    __Pyx_INCREF(__pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_i);
    if (unlikely(PyObject_SetItem(__pyx_v_FIM_det, __pyx_t_1, __pyx_t_11) < 0)) __PYX_ERR(0, 2889, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 2890: 
+2891:         rows,cols = np.triu_indices(dim,1)
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_triu_indices); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_11, __pyx_int_1};
    __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2891, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_11, __pyx_int_1};
    __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2891, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2891, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_t_11);
    __Pyx_INCREF(__pyx_int_1);
    __Pyx_GIVEREF(__pyx_int_1);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_int_1);
    __pyx_t_11 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2891, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
    PyObject* sequence = __pyx_t_6;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2891, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_5);
    #else
    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2891, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2891, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_11 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2891, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_11)->tp_iternext;
    index = 0; __pyx_t_1 = __pyx_t_7(__pyx_t_11); if (unlikely(!__pyx_t_1)) goto __pyx_L13_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_11); if (unlikely(!__pyx_t_5)) goto __pyx_L13_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_11), 2) < 0) __PYX_ERR(0, 2891, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    goto __pyx_L14_unpacking_done;
    __pyx_L13_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2891, __pyx_L1_error)
    __pyx_L14_unpacking_done:;
  }
  __pyx_v_rows = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_cols = __pyx_t_5;
  __pyx_t_5 = 0;
 2892: 
+2893:         for i,j in zip(rows,cols):
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2893, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_v_rows);
  __Pyx_GIVEREF(__pyx_v_rows);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_rows);
  __Pyx_INCREF(__pyx_v_cols);
  __Pyx_GIVEREF(__pyx_v_cols);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_cols);
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2893, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
    __pyx_t_6 = __pyx_t_5; __Pyx_INCREF(__pyx_t_6); __pyx_t_10 = 0;
    __pyx_t_12 = NULL;
  } else {
    __pyx_t_10 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2893, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_12 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2893, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  for (;;) {
    if (likely(!__pyx_t_12)) {
      if (likely(PyList_CheckExact(__pyx_t_6))) {
        if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_6)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_5); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 2893, __pyx_L1_error)
        #else
        __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2893, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
      } else {
        if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_5); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 2893, __pyx_L1_error)
        #else
        __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2893, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
      }
    } else {
      __pyx_t_5 = __pyx_t_12(__pyx_t_6);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 2893, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_5);
    }
    if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
      PyObject* sequence = __pyx_t_5;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 2893, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_11 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_11);
      #else
      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2893, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2893, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      #endif
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_2 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2893, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext;
      index = 0; __pyx_t_1 = __pyx_t_7(__pyx_t_2); if (unlikely(!__pyx_t_1)) goto __pyx_L17_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_1);
      index = 1; __pyx_t_11 = __pyx_t_7(__pyx_t_2); if (unlikely(!__pyx_t_11)) goto __pyx_L17_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_11);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_2), 2) < 0) __PYX_ERR(0, 2893, __pyx_L1_error)
      __pyx_t_7 = NULL;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L18_unpacking_done;
      __pyx_L17_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_7 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 2893, __pyx_L1_error)
      __pyx_L18_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_11);
    __pyx_t_11 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+2894:             FIM_det[i,j] = dmu[i]@invcov@dmu[j]
    __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_dmu, __pyx_v_i); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2894, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_11 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_5, __pyx_v_invcov); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2894, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_dmu, __pyx_v_j); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2894, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_11, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2894, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2894, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_i);
    __Pyx_INCREF(__pyx_v_j);
    __Pyx_GIVEREF(__pyx_v_j);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_j);
    if (unlikely(PyObject_SetItem(__pyx_v_FIM_det, __pyx_t_5, __pyx_t_1) < 0)) __PYX_ERR(0, 2894, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2895: 
+2896:         i_lower = np.tril_indices(dim,-1)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2896, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_tril_indices); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2896, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2896, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_11 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_11)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_t_1, __pyx_int_neg_1};
    __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2896, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_t_1, __pyx_int_neg_1};
    __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2896, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else
  #endif
  {
    __pyx_t_2 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2896, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__pyx_t_11) {
      __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_11); __pyx_t_11 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_4, __pyx_t_1);
    __Pyx_INCREF(__pyx_int_neg_1);
    __Pyx_GIVEREF(__pyx_int_neg_1);
    PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_4, __pyx_int_neg_1);
    __pyx_t_1 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2896, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_i_lower = __pyx_t_6;
  __pyx_t_6 = 0;
+2897:         FIM_det[i_lower] = FIM_det.T[i_lower]
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_FIM_det, __pyx_n_s_T); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2897, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_v_i_lower); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2897, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(PyObject_SetItem(__pyx_v_FIM_det, __pyx_v_i_lower, __pyx_t_5) < 0)) __PYX_ERR(0, 2897, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+2898:         return FIM_det
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_FIM_det);
  __pyx_r = __pyx_v_FIM_det;
  goto __pyx_L0;
 2899: 
+2900:     def latent_hessian(self, obs, fltr, Tf, infer_result, contactMatrix=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_91latent_hessian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_90latent_hessian[] = "\n        Computes the Hessian matrix for the initial conditions and all desired parameters, including control parameters, for a SIR type model with partially observed classes. The unobserved classes are treated as latent variables.\n\n        Parameters\n        ----------\n        obs:  np.array\n            The partially observed trajectory.\n        fltr: 2d np.array\n            The filter for the observation such that\n            :math:`F_{ij} x_j (t) = obs_i(t)`\n        Tf: float\n            Total time of the trajectory\n        infer_result: dict\n            Dictionary returned by latent_infer\n        contactMatrix: callable, optional\n            A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.\n            Either a contactMatrix or a generator must be specified.\n        generator: pyross.contactMatrix, optional\n            A pyross.contactMatrix object that generates a contact matrix function with specified lockdown\n            parameters.\n            Either a contactMatrix or a generator must be specified.\n        intervention_fun: callable, optional\n            The calling signature is `intervention_func(t, **kwargs)`,\n            where t is time and kwargs are other keyword arguments for the function.\n            The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.\n            The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.\n            If not set, assume intervention that's constant in time.\n            See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.\n        tangent: bool, optional\n            Set to True to use tangent space inference. Default is False.\n        eps: float or numpy.array, optional\n            Step size for finite differences computation of the hessian with respect to the parameters. Must be either a scalar, or an array of length `len(infer_result['flat_params'])`. I""f not specified,\n            \n            .. code-block:: python\n\n               eps = 100*infer_result['flat_params'] \n                     *numpy.divide(numpy.spacing(infer_result['log_likelihood']),\n                     infer_result['log_likelihood'])**(0.25) \n\n           is used. For `fd_method=\"central\"` it is recommended to use a step-size greater or equal to `eps`. \n           Decreasing the step size too small can result in round-off error.\n        fd_method: str, optional\n            The type of finite-difference scheme used to compute the hessian, supports \"forward\" and \"central\". Default is \"central\".\n        inter_steps: int, optional\n            Intermediate steps between observations for the deterministic forward Euler integration. \n            A higher number of intermediate steps will improve the accuracy of the result, but will make computations slower. \n            Setting `inter_steps=0` will fall back to the method accessible via `det_method` for the deterministic integration. \n            We have found that forward Euler is generally slower, but sometimes more stable for derivatives with respect \n            to parameters than the variable step size integrators used elsewhere in pyross. Default is 0.\n        Returns\n        -------\n        hess: 2d numpy.array\n            The Hessian matrix\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_91latent_hessian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_obs = 0;
  PyObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_infer_result = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_eps = 0;
  PyObject *__pyx_v_fd_method = 0;
  PyObject *__pyx_v_inter_steps = 0;
  PyObject *__pyx_v_nprocesses = 0;
  PyObject *__pyx_v_basis = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_hessian (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_infer_result,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_tangent,&__pyx_n_s_eps,&__pyx_n_s_fd_method,&__pyx_n_s_inter_steps,&__pyx_n_s_nprocesses,&__pyx_n_s_basis,0};
    PyObject* values[13] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[4] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_90latent_hessian(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_obs, PyObject *__pyx_v_fltr, PyObject *__pyx_v_Tf, PyObject *__pyx_v_infer_result, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_tangent, PyObject *__pyx_v_eps, PyObject *__pyx_v_fd_method, PyObject *__pyx_v_inter_steps, PyObject *__pyx_v_nprocesses, PyObject *__pyx_v_basis) {
  PyObject *__pyx_v_obs0 = NULL;
  PyObject *__pyx_v_flat_params = NULL;
  PyObject *__pyx_v_kwargs = NULL;
  PyObject *__pyx_v_key = NULL;
  PyObject *__pyx_v_xx = NULL;
  PyObject *__pyx_v_fx = NULL;
  PyObject *__pyx_v_hess = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_hessian", 0);
  __Pyx_INCREF(__pyx_v_obs);
  __Pyx_INCREF(__pyx_v_fltr);
  __Pyx_INCREF(__pyx_v_eps);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_hessian", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_obs0);
  __Pyx_XDECREF(__pyx_v_flat_params);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_xx);
  __Pyx_XDECREF(__pyx_v_fx);
  __Pyx_XDECREF(__pyx_v_hess);
  __Pyx_XDECREF(__pyx_v_obs);
  __Pyx_XDECREF(__pyx_v_fltr);
  __Pyx_XDECREF(__pyx_v_eps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2901:                        generator=None, intervention_fun=None, tangent=False,
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject *)Py_False);
+2902:                        eps=None, fd_method="central", inter_steps=0, nprocesses=0, basis=None):
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject *)__pyx_n_u_central);
    values[10] = ((PyObject *)__pyx_int_0);
    values[11] = ((PyObject *)__pyx_int_0);
    values[12] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_hessian", 0, 4, 13, 1); __PYX_ERR(0, 2900, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_hessian", 0, 4, 13, 2); __PYX_ERR(0, 2900, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_infer_result)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_hessian", 0, 4, 13, 3); __PYX_ERR(0, 2900, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fd_method);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nprocesses);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_basis);
          if (value) { values[12] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "latent_hessian") < 0)) __PYX_ERR(0, 2900, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obs = values[0];
    __pyx_v_fltr = values[1];
    __pyx_v_Tf = values[2];
    __pyx_v_infer_result = values[3];
    __pyx_v_contactMatrix = values[4];
    __pyx_v_generator = values[5];
    __pyx_v_intervention_fun = values[6];
    __pyx_v_tangent = values[7];
    __pyx_v_eps = values[8];
    __pyx_v_fd_method = values[9];
    __pyx_v_inter_steps = values[10];
    __pyx_v_nprocesses = values[11];
    __pyx_v_basis = values[12];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("latent_hessian", 0, 4, 13, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2900, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_hessian", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_90latent_hessian(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_eps, __pyx_v_fd_method, __pyx_v_inter_steps, __pyx_v_nprocesses, __pyx_v_basis);
 2903:         """
 2904:         Computes the Hessian matrix for the initial conditions and all desired parameters, including control parameters, for a SIR type model with partially observed classes. The unobserved classes are treated as latent variables.
 2905: 
 2906:         Parameters
 2907:         ----------
 2908:         obs:  np.array
 2909:             The partially observed trajectory.
 2910:         fltr: 2d np.array
 2911:             The filter for the observation such that
 2912:             :math:`F_{ij} x_j (t) = obs_i(t)`
 2913:         Tf: float
 2914:             Total time of the trajectory
 2915:         infer_result: dict
 2916:             Dictionary returned by latent_infer
 2917:         contactMatrix: callable, optional
 2918:             A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.
 2919:             Either a contactMatrix or a generator must be specified.
 2920:         generator: pyross.contactMatrix, optional
 2921:             A pyross.contactMatrix object that generates a contact matrix function with specified lockdown
 2922:             parameters.
 2923:             Either a contactMatrix or a generator must be specified.
 2924:         intervention_fun: callable, optional
 2925:             The calling signature is `intervention_func(t, **kwargs)`,
 2926:             where t is time and kwargs are other keyword arguments for the function.
 2927:             The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.
 2928:             The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.
 2929:             If not set, assume intervention that's constant in time.
 2930:             See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.
 2931:         tangent: bool, optional
 2932:             Set to True to use tangent space inference. Default is False.
 2933:         eps: float or numpy.array, optional
 2934:             Step size for finite differences computation of the hessian with respect to the parameters. Must be either a scalar, or an array of length `len(infer_result['flat_params'])`. If not specified,
 2935:             
 2936:             .. code-block:: python
 2937: 
 2938:                eps = 100*infer_result['flat_params'] 
 2939:                      *numpy.divide(numpy.spacing(infer_result['log_likelihood']),
 2940:                      infer_result['log_likelihood'])**(0.25) 
 2941: 
 2942:            is used. For `fd_method="central"` it is recommended to use a step-size greater or equal to `eps`. 
 2943:            Decreasing the step size too small can result in round-off error.
 2944:         fd_method: str, optional
 2945:             The type of finite-difference scheme used to compute the hessian, supports "forward" and "central". Default is "central".
 2946:         inter_steps: int, optional
 2947:             Intermediate steps between observations for the deterministic forward Euler integration. 
 2948:             A higher number of intermediate steps will improve the accuracy of the result, but will make computations slower. 
 2949:             Setting `inter_steps=0` will fall back to the method accessible via `det_method` for the deterministic integration. 
 2950:             We have found that forward Euler is generally slower, but sometimes more stable for derivatives with respect 
 2951:             to parameters than the variable step size integrators used elsewhere in pyross. Default is 0.
 2952:         Returns
 2953:         -------
 2954:         hess: 2d numpy.array
 2955:             The Hessian matrix
 2956:         """
 2957:         # Sanity checks of the inputs
+2958:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2958, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2958, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2958, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_intervention_fun);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2959: 
 2960:         # Process fltr and obs
+2961:         fltr, obs, obs0 = pyross.utils.process_latent_data(fltr, obs)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2961, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2961, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_process_latent_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2961, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_fltr, __pyx_v_obs};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2961, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_fltr, __pyx_v_obs};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2961, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_3 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2961, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_v_fltr);
    __Pyx_GIVEREF(__pyx_v_fltr);
    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_4, __pyx_v_fltr);
    __Pyx_INCREF(__pyx_v_obs);
    __Pyx_GIVEREF(__pyx_v_obs);
    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_4, __pyx_v_obs);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2961, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 2961, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_5);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2961, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2961, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2961, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2961, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 2; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 3) < 0) __PYX_ERR(0, 2961, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 2961, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __Pyx_DECREF_SET(__pyx_v_fltr, __pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_obs, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_v_obs0 = __pyx_t_5;
  __pyx_t_5 = 0;
 2962: 
+2963:         flat_params = np.copy(infer_result['flat_params'])
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_n_u_flat_params); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_flat_params = __pyx_t_1;
  __pyx_t_1 = 0;
 2964: 
+2965:         kwargs = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_kwargs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+2966:         kwargs['obs'] = obs
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_obs, __pyx_v_obs) < 0)) __PYX_ERR(0, 2966, __pyx_L1_error)
+2967:         kwargs['fltr'] = fltr
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_fltr, __pyx_v_fltr) < 0)) __PYX_ERR(0, 2967, __pyx_L1_error)
+2968:         kwargs['Tf'] = Tf
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_Tf, __pyx_v_Tf) < 0)) __PYX_ERR(0, 2968, __pyx_L1_error)
+2969:         kwargs['obs0'] = obs0
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_obs0, __pyx_v_obs0) < 0)) __PYX_ERR(0, 2969, __pyx_L1_error)
+2970:         kwargs['tangent'] = tangent
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_tangent, __pyx_v_tangent) < 0)) __PYX_ERR(0, 2970, __pyx_L1_error)
+2971:         for key in ['param_keys', 'param_guess_range', 'is_scale_parameter',
  __pyx_t_1 = __pyx_tuple__29; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0;
  for (;;) {
    if (__pyx_t_8 >= 8) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 2971, __pyx_L1_error)
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2971, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_key, ((PyObject*)__pyx_t_3));
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple__29 = PyTuple_Pack(8, __pyx_n_u_param_keys, __pyx_n_u_param_guess_range, __pyx_n_u_is_scale_parameter, __pyx_n_u_scaled_param_guesses, __pyx_n_u_param_length, __pyx_n_u_init_flags, __pyx_n_u_init_fltrs, __pyx_n_u_prior); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 2971, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__29);
  __Pyx_GIVEREF(__pyx_tuple__29);
 2972:                     'scaled_param_guesses', 'param_length', 'init_flags',
 2973:                     'init_fltrs', 'prior']:
+2974:             kwargs[key] = infer_result[key]
    __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_v_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_v_key, __pyx_t_3) < 0)) __PYX_ERR(0, 2974, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 2975: 
+2976:         kwargs['generator']=generator
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_generator, __pyx_v_generator) < 0)) __PYX_ERR(0, 2976, __pyx_L1_error)
+2977:         kwargs['intervention_fun']=intervention_fun
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_intervention_fun, __pyx_v_intervention_fun) < 0)) __PYX_ERR(0, 2977, __pyx_L1_error)
+2978:         kwargs['inter_steps']=inter_steps
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_inter_steps, __pyx_v_inter_steps) < 0)) __PYX_ERR(0, 2978, __pyx_L1_error)
+2979:         kwargs['disable_penalty']=None
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_disable_penalty, Py_None) < 0)) __PYX_ERR(0, 2979, __pyx_L1_error)
 2980: 
+2981:         if np.all(eps == None):
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_all); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_eps, Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2981, __pyx_L1_error)
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 2981, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_9) {
/* … */
  }
+2982:             xx = infer_result['flat_params']
    __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_n_u_flat_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_xx = __pyx_t_1;
    __pyx_t_1 = 0;
+2983:             fx = abs(infer_result['log_posterior'])
    __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_n_u_log_posterior); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2983, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyNumber_Absolute(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2983, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_fx = __pyx_t_5;
    __pyx_t_5 = 0;
+2984:             eps = 100 * xx * np.divide(np.spacing(fx),fx)**(0.25)
    __pyx_t_5 = PyNumber_Multiply(__pyx_int_100, __pyx_v_xx); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2984, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2984, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_divide); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2984, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2984, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_spacing); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2984, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_6, __pyx_v_fx) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_fx);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2984, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_4 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_3, __pyx_v_fx};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2984, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_3, __pyx_v_fx};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2984, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_10) {
        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_10); __pyx_t_10 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_4, __pyx_t_3);
      __Pyx_INCREF(__pyx_v_fx);
      __Pyx_GIVEREF(__pyx_v_fx);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_4, __pyx_v_fx);
      __pyx_t_3 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyNumber_Power(__pyx_t_1, __pyx_float_0_25, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2984, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Multiply(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2984, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_eps, __pyx_t_1);
    __pyx_t_1 = 0;
 2985:             #eps = 10.*np.spacing(flat_params)**(0.25)
+2986:         print('epsilon used for differentiation: ', eps)
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2986, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_kp_u_epsilon_used_for_differentiation);
  __Pyx_GIVEREF(__pyx_kp_u_epsilon_used_for_differentiation);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_epsilon_used_for_differentiation);
  __Pyx_INCREF(__pyx_v_eps);
  __Pyx_GIVEREF(__pyx_v_eps);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_eps);
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2986, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 2987: 
+2988:         hess = hessian_finite_difference(flat_params, self._latent_infer_to_minimize, eps, method=fd_method, nprocesses=nprocesses,
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_hessian_finite_difference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_latent_infer_to_minimize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_flat_params);
  __Pyx_GIVEREF(__pyx_v_flat_params);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_flat_params);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_eps);
  __Pyx_GIVEREF(__pyx_v_eps);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_eps);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_method, __pyx_v_fd_method) < 0) __PYX_ERR(0, 2988, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_nprocesses, __pyx_v_nprocesses) < 0) __PYX_ERR(0, 2988, __pyx_L1_error)
/* … */
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_hess = __pyx_t_6;
  __pyx_t_6 = 0;
+2989:                                          basis=basis, function_kwargs=kwargs)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_basis, __pyx_v_basis) < 0) __PYX_ERR(0, 2988, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_function_kwargs, __pyx_v_kwargs) < 0) __PYX_ERR(0, 2988, __pyx_L1_error)
+2990:         return hess
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_hess);
  __pyx_r = __pyx_v_hess;
  goto __pyx_L0;
 2991: 
 2992: 
+2993:     def sample_latent(self, obs, fltr, Tf, infer_result, flat_params_list, contactMatrix=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_93sample_latent(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_92sample_latent[] = "\n        Samples the posterior and prior \n\n        Parameters\n        ----------\n        obs:  np.array\n            The partially observed trajectory.\n        fltr: 2d np.array\n            The filter for the observation such that\n            :math:`F_{ij} x_j (t) = obs_i(t)`\n        Tf: float\n            The total time of the trajectory.\n        infer_result: dict\n            Dictionary returned by latent_infer\n        flat_params_list: list of np.array's\n            Parameters for which the prior and posterior are sampled\n        contactMatrix: callable, optional\n            A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.\n            Either a contactMatrix or a generator must be specified.\n        generator: pyross.contactMatrix, optional\n            A pyross.contactMatrix object that generates a contact matrix function with specified lockdown\n            parameters.\n            Either a contactMatrix or a generator must be specified.\n        intervention_fun: callable, optional\n            The calling signature is `intervention_func(t, **kwargs)`,\n            where t is time and kwargs are other keyword arguments for the function.\n            The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.\n            The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.\n            If not set, assume intervention that's constant in time.\n            See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.\n        tangent: bool, optional\n            Set to True to use tangent space inference. Default is False.\n        inter_steps: int, optional\n            Intermediate steps between observations for the deterministic forward Euler integration. \n            A higher number of intermediate steps will improve the accuracy of the result, but will make computations slower. \n            Setting `inter_steps=0`"" will fall back to the method accessible via `det_method` for the deterministic integration.\n        nprocesses: int, optional\n            The number of processes used to compute the likelihood for the walkers, needs `pathos`. Default is\n            the number of cpu cores if `pathos` is available, otherwise 1.\n\n        Returns\n        -------\n        posterior: np.array\n            posterior evaluated along the 1d slice\n        prior: np.array\n            prior evaluated along the 1d slice\n        \n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_93sample_latent(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_obs = 0;
  PyObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_infer_result = 0;
  PyObject *__pyx_v_flat_params_list = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_inter_steps = 0;
  PyObject *__pyx_v_nprocesses = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sample_latent (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_infer_result,&__pyx_n_s_flat_params_list,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_tangent,&__pyx_n_s_inter_steps,&__pyx_n_s_nprocesses,0};
    PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0};
    values[5] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_92sample_latent(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_obs, PyObject *__pyx_v_fltr, PyObject *__pyx_v_Tf, PyObject *__pyx_v_infer_result, PyObject *__pyx_v_flat_params_list, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_tangent, PyObject *__pyx_v_inter_steps, PyObject *__pyx_v_nprocesses) {
  PyObject *__pyx_v_obs0 = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_flat_params = NULL;
  PyObject *__pyx_v_kwargs = NULL;
  PyObject *__pyx_v_key = NULL;
  PyObject *__pyx_v_posterior = NULL;
  PyObject *__pyx_v_prior = NULL;
  PyObject *__pyx_8genexpr4__pyx_v_s = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sample_latent", 0);
  __Pyx_INCREF(__pyx_v_obs);
  __Pyx_INCREF(__pyx_v_fltr);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("pyross.inference.SIR_type.sample_latent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_obs0);
  __Pyx_XDECREF(__pyx_v_flat_params);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_posterior);
  __Pyx_XDECREF(__pyx_v_prior);
  __Pyx_XDECREF(__pyx_8genexpr4__pyx_v_s);
  __Pyx_XDECREF(__pyx_v_obs);
  __Pyx_XDECREF(__pyx_v_fltr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2994:                        generator=None, intervention_fun=None, tangent=False, inter_steps=0, nprocesses=0):
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)Py_False);
    values[9] = ((PyObject *)__pyx_int_0);
    values[10] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_latent", 0, 5, 11, 1); __PYX_ERR(0, 2993, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_latent", 0, 5, 11, 2); __PYX_ERR(0, 2993, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_infer_result)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_latent", 0, 5, 11, 3); __PYX_ERR(0, 2993, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flat_params_list)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_latent", 0, 5, 11, 4); __PYX_ERR(0, 2993, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nprocesses);
          if (value) { values[10] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sample_latent") < 0)) __PYX_ERR(0, 2993, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obs = values[0];
    __pyx_v_fltr = values[1];
    __pyx_v_Tf = values[2];
    __pyx_v_infer_result = values[3];
    __pyx_v_flat_params_list = values[4];
    __pyx_v_contactMatrix = values[5];
    __pyx_v_generator = values[6];
    __pyx_v_intervention_fun = values[7];
    __pyx_v_tangent = values[8];
    __pyx_v_inter_steps = values[9];
    __pyx_v_nprocesses = values[10];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("sample_latent", 0, 5, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2993, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.sample_latent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_92sample_latent(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_flat_params_list, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_inter_steps, __pyx_v_nprocesses);
 2995:         """
 2996:         Samples the posterior and prior 
 2997: 
 2998:         Parameters
 2999:         ----------
 3000:         obs:  np.array
 3001:             The partially observed trajectory.
 3002:         fltr: 2d np.array
 3003:             The filter for the observation such that
 3004:             :math:`F_{ij} x_j (t) = obs_i(t)`
 3005:         Tf: float
 3006:             The total time of the trajectory.
 3007:         infer_result: dict
 3008:             Dictionary returned by latent_infer
 3009:         flat_params_list: list of np.array's
 3010:             Parameters for which the prior and posterior are sampled
 3011:         contactMatrix: callable, optional
 3012:             A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.
 3013:             Either a contactMatrix or a generator must be specified.
 3014:         generator: pyross.contactMatrix, optional
 3015:             A pyross.contactMatrix object that generates a contact matrix function with specified lockdown
 3016:             parameters.
 3017:             Either a contactMatrix or a generator must be specified.
 3018:         intervention_fun: callable, optional
 3019:             The calling signature is `intervention_func(t, **kwargs)`,
 3020:             where t is time and kwargs are other keyword arguments for the function.
 3021:             The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.
 3022:             The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.
 3023:             If not set, assume intervention that's constant in time.
 3024:             See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.
 3025:         tangent: bool, optional
 3026:             Set to True to use tangent space inference. Default is False.
 3027:         inter_steps: int, optional
 3028:             Intermediate steps between observations for the deterministic forward Euler integration. 
 3029:             A higher number of intermediate steps will improve the accuracy of the result, but will make computations slower. 
 3030:             Setting `inter_steps=0` will fall back to the method accessible via `det_method` for the deterministic integration.
 3031:         nprocesses: int, optional
 3032:             The number of processes used to compute the likelihood for the walkers, needs `pathos`. Default is
 3033:             the number of cpu cores if `pathos` is available, otherwise 1.
 3034: 
 3035:         Returns
 3036:         -------
 3037:         posterior: np.array
 3038:             posterior evaluated along the 1d slice
 3039:         prior: np.array
 3040:             prior evaluated along the 1d slice
 3041:         
 3042:         """
 3043:         # Sanity checks of the inputs
+3044:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3044, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3044, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3044, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3044, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_intervention_fun);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3044, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3045: 
 3046:         # Process fltr and obs
+3047:         fltr, obs, obs0 = pyross.utils.process_latent_data(fltr, obs)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3047, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3047, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_process_latent_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3047, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_fltr, __pyx_v_obs};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3047, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_fltr, __pyx_v_obs};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3047, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_3 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3047, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_v_fltr);
    __Pyx_GIVEREF(__pyx_v_fltr);
    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_4, __pyx_v_fltr);
    __Pyx_INCREF(__pyx_v_obs);
    __Pyx_GIVEREF(__pyx_v_obs);
    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_4, __pyx_v_obs);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3047, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 3047, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_5);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3047, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3047, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3047, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3047, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 2; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 3) < 0) __PYX_ERR(0, 3047, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 3047, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __Pyx_DECREF_SET(__pyx_v_fltr, __pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_obs, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_v_obs0 = __pyx_t_5;
  __pyx_t_5 = 0;
 3048: 
+3049:         flat_params = np.copy(infer_result['flat_params'])
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3049, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3049, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_n_u_flat_params); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3049, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3049, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_flat_params = __pyx_t_1;
  __pyx_t_1 = 0;
 3050: 
+3051:         kwargs = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_kwargs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3052:         kwargs['obs'] = obs
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_obs, __pyx_v_obs) < 0)) __PYX_ERR(0, 3052, __pyx_L1_error)
+3053:         kwargs['fltr'] = fltr
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_fltr, __pyx_v_fltr) < 0)) __PYX_ERR(0, 3053, __pyx_L1_error)
+3054:         kwargs['Tf'] = Tf
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_Tf, __pyx_v_Tf) < 0)) __PYX_ERR(0, 3054, __pyx_L1_error)
+3055:         kwargs['obs0'] = obs0
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_obs0, __pyx_v_obs0) < 0)) __PYX_ERR(0, 3055, __pyx_L1_error)
+3056:         kwargs['tangent'] = tangent
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_tangent, __pyx_v_tangent) < 0)) __PYX_ERR(0, 3056, __pyx_L1_error)
+3057:         for key in ['param_keys', 'param_guess_range', 'is_scale_parameter',
  __pyx_t_1 = __pyx_tuple__29; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0;
  for (;;) {
    if (__pyx_t_8 >= 8) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 3057, __pyx_L1_error)
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3057, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_key, ((PyObject*)__pyx_t_3));
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3058:                     'scaled_param_guesses', 'param_length', 'init_flags',
 3059:                     'init_fltrs', 'prior']:
+3060:             kwargs[key] = infer_result[key]
    __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_v_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3060, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_v_key, __pyx_t_3) < 0)) __PYX_ERR(0, 3060, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 3061: 
+3062:         kwargs['generator']=generator
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_generator, __pyx_v_generator) < 0)) __PYX_ERR(0, 3062, __pyx_L1_error)
+3063:         kwargs['intervention_fun']=intervention_fun
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_intervention_fun, __pyx_v_intervention_fun) < 0)) __PYX_ERR(0, 3063, __pyx_L1_error)
+3064:         kwargs['inter_steps']=inter_steps
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_inter_steps, __pyx_v_inter_steps) < 0)) __PYX_ERR(0, 3064, __pyx_L1_error)
+3065:         kwargs['disable_penalty']=None
  if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_n_u_disable_penalty, Py_None) < 0)) __PYX_ERR(0, 3065, __pyx_L1_error)
 3066: 
 3067: 
+3068:         posterior = eval_parallel(flat_params_list, self._latent_infer_to_minimize, nprocesses=nprocesses, function_kwargs=kwargs)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_eval_parallel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3068, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_latent_infer_to_minimize); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3068, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3068, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_flat_params_list);
  __Pyx_GIVEREF(__pyx_v_flat_params_list);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_flat_params_list);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3068, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_nprocesses, __pyx_v_nprocesses) < 0) __PYX_ERR(0, 3068, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_function_kwargs, __pyx_v_kwargs) < 0) __PYX_ERR(0, 3068, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3068, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_posterior = __pyx_t_2;
  __pyx_t_2 = 0;
+3069:         prior = [ np.sum(infer_result['prior'].logpdf(s)) for s in flat_params_list]
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3069, __pyx_L9_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (likely(PyList_CheckExact(__pyx_v_flat_params_list)) || PyTuple_CheckExact(__pyx_v_flat_params_list)) {
      __pyx_t_3 = __pyx_v_flat_params_list; __Pyx_INCREF(__pyx_t_3); __pyx_t_8 = 0;
      __pyx_t_9 = NULL;
    } else {
      __pyx_t_8 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_flat_params_list); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3069, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3069, __pyx_L9_error)
    }
    for (;;) {
      if (likely(!__pyx_t_9)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 3069, __pyx_L9_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3069, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 3069, __pyx_L9_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3069, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_9(__pyx_t_3);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 3069, __pyx_L9_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XDECREF_SET(__pyx_8genexpr4__pyx_v_s, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3069, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sum); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3069, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_10 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_n_u_prior); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3069, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_logpdf); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3069, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
        }
      }
      __pyx_t_1 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_10, __pyx_8genexpr4__pyx_v_s) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_8genexpr4__pyx_v_s);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3069, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_11)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_5 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_11, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_1);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3069, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 3069, __pyx_L9_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_8genexpr4__pyx_v_s); __pyx_8genexpr4__pyx_v_s = 0;
    goto __pyx_L12_exit_scope;
    __pyx_L9_error:;
    __Pyx_XDECREF(__pyx_8genexpr4__pyx_v_s); __pyx_8genexpr4__pyx_v_s = 0;
    goto __pyx_L1_error;
    __pyx_L12_exit_scope:;
  } /* exit inner scope */
  __pyx_v_prior = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
 3070: 
+3071:         return -np.array(posterior), np.array(prior)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_v_posterior) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_posterior);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Negative(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_3, __pyx_v_prior) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_prior);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2);
  __pyx_t_5 = 0;
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_6;
  __pyx_t_6 = 0;
  goto __pyx_L0;
 3072: 
 3073: 
+3074:     def latent_param_slice(self, obs, fltr, Tf, infer_result, pos, direction, scale, contactMatrix=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_95latent_param_slice(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_94latent_param_slice[] = "\n        Samples the posterior and prior along a one-dimensional slice of the parameter space\n\n        Parameters\n        ----------\n        obs:  np.array\n            The partially observed trajectory.\n        fltr: 2d np.array\n            The filter for the observation such that\n            :math:`F_{ij} x_j (t) = obs_i(t)`\n        Tf: float\n            The total time of the trajectory.\n        infer_result: dict\n            Dictionary returned by latent_infer\n        pos: np.array\n            Position in parameter space around which the parameter slice is computed\n        direction: np.array\n            Direction in parameter space in which the parameter slice is computed    \n        scale: np.array\n            Values by which the direction vector is scaled. Points evaluated are pos + scale * direction\n        contactMatrix: callable, optional\n            A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.\n            Either a contactMatrix or a generator must be specified.\n        generator: pyross.contactMatrix, optional\n            A pyross.contactMatrix object that generates a contact matrix function with specified lockdown\n            parameters.\n            Either a contactMatrix or a generator must be specified.\n        intervention_fun: callable, optional\n            The calling signature is `intervention_func(t, **kwargs)`,\n            where t is time and kwargs are other keyword arguments for the function.\n            The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.\n            The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.\n            If not set, assume intervention that's constant in time.\n            See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.\n        tangent: bool, optional\n            Set to True to use tangent space inference. Default is False.\n        in""ter_steps: int, optional\n            Intermediate steps between observations for the deterministic forward Euler integration. \n            A higher number of intermediate steps will improve the accuracy of the result, but will make computations slower. \n            Setting `inter_steps=0` will fall back to the method accessible via `det_method` for the deterministic integration.\n        nprocesses: int, optional\n            The number of processes used to compute the likelihood for the walkers, needs `pathos`. Default is\n            the number of cpu cores if `pathos` is available, otherwise 1.\n\n        Returns\n        -------\n        posterior: np.array\n            posterior evaluated along the 1d slice\n        prior: np.array\n            prior evaluated along the 1d slice\n        \n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_95latent_param_slice(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_obs = 0;
  PyObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_infer_result = 0;
  PyObject *__pyx_v_pos = 0;
  PyObject *__pyx_v_direction = 0;
  PyObject *__pyx_v_scale = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_inter_steps = 0;
  PyObject *__pyx_v_nprocesses = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_param_slice (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_infer_result,&__pyx_n_s_pos,&__pyx_n_s_direction,&__pyx_n_s_scale,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_tangent,&__pyx_n_s_inter_steps,&__pyx_n_s_nprocesses,0};
    PyObject* values[13] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[7] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_94latent_param_slice(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_obs, PyObject *__pyx_v_fltr, PyObject *__pyx_v_Tf, PyObject *__pyx_v_infer_result, PyObject *__pyx_v_pos, PyObject *__pyx_v_direction, PyObject *__pyx_v_scale, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_tangent, PyObject *__pyx_v_inter_steps, PyObject *__pyx_v_nprocesses) {
  PyObject *__pyx_v_samples = NULL;
  PyObject *__pyx_8genexpr5__pyx_v_s = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_param_slice", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_param_slice", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_samples);
  __Pyx_XDECREF(__pyx_8genexpr5__pyx_v_s);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3075:                        generator=None, intervention_fun=None, tangent=False, inter_steps=0, nprocesses=0):
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject *)Py_None);
    values[10] = ((PyObject *)Py_False);
    values[11] = ((PyObject *)__pyx_int_0);
    values[12] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_param_slice", 0, 7, 13, 1); __PYX_ERR(0, 3074, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_param_slice", 0, 7, 13, 2); __PYX_ERR(0, 3074, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_infer_result)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_param_slice", 0, 7, 13, 3); __PYX_ERR(0, 3074, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pos)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_param_slice", 0, 7, 13, 4); __PYX_ERR(0, 3074, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_direction)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_param_slice", 0, 7, 13, 5); __PYX_ERR(0, 3074, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_scale)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_param_slice", 0, 7, 13, 6); __PYX_ERR(0, 3074, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nprocesses);
          if (value) { values[12] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "latent_param_slice") < 0)) __PYX_ERR(0, 3074, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obs = values[0];
    __pyx_v_fltr = values[1];
    __pyx_v_Tf = values[2];
    __pyx_v_infer_result = values[3];
    __pyx_v_pos = values[4];
    __pyx_v_direction = values[5];
    __pyx_v_scale = values[6];
    __pyx_v_contactMatrix = values[7];
    __pyx_v_generator = values[8];
    __pyx_v_intervention_fun = values[9];
    __pyx_v_tangent = values[10];
    __pyx_v_inter_steps = values[11];
    __pyx_v_nprocesses = values[12];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("latent_param_slice", 0, 7, 13, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3074, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_param_slice", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_94latent_param_slice(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_pos, __pyx_v_direction, __pyx_v_scale, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_inter_steps, __pyx_v_nprocesses);
 3076:         """
 3077:         Samples the posterior and prior along a one-dimensional slice of the parameter space
 3078: 
 3079:         Parameters
 3080:         ----------
 3081:         obs:  np.array
 3082:             The partially observed trajectory.
 3083:         fltr: 2d np.array
 3084:             The filter for the observation such that
 3085:             :math:`F_{ij} x_j (t) = obs_i(t)`
 3086:         Tf: float
 3087:             The total time of the trajectory.
 3088:         infer_result: dict
 3089:             Dictionary returned by latent_infer
 3090:         pos: np.array
 3091:             Position in parameter space around which the parameter slice is computed
 3092:         direction: np.array
 3093:             Direction in parameter space in which the parameter slice is computed    
 3094:         scale: np.array
 3095:             Values by which the direction vector is scaled. Points evaluated are pos + scale * direction
 3096:         contactMatrix: callable, optional
 3097:             A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.
 3098:             Either a contactMatrix or a generator must be specified.
 3099:         generator: pyross.contactMatrix, optional
 3100:             A pyross.contactMatrix object that generates a contact matrix function with specified lockdown
 3101:             parameters.
 3102:             Either a contactMatrix or a generator must be specified.
 3103:         intervention_fun: callable, optional
 3104:             The calling signature is `intervention_func(t, **kwargs)`,
 3105:             where t is time and kwargs are other keyword arguments for the function.
 3106:             The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.
 3107:             The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.
 3108:             If not set, assume intervention that's constant in time.
 3109:             See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.
 3110:         tangent: bool, optional
 3111:             Set to True to use tangent space inference. Default is False.
 3112:         inter_steps: int, optional
 3113:             Intermediate steps between observations for the deterministic forward Euler integration. 
 3114:             A higher number of intermediate steps will improve the accuracy of the result, but will make computations slower. 
 3115:             Setting `inter_steps=0` will fall back to the method accessible via `det_method` for the deterministic integration.
 3116:         nprocesses: int, optional
 3117:             The number of processes used to compute the likelihood for the walkers, needs `pathos`. Default is
 3118:             the number of cpu cores if `pathos` is available, otherwise 1.
 3119: 
 3120:         Returns
 3121:         -------
 3122:         posterior: np.array
 3123:             posterior evaluated along the 1d slice
 3124:         prior: np.array
 3125:             prior evaluated along the 1d slice
 3126:         
 3127:         """
 3128: 
 3129: 
+3130:         samples = [ pos + s*direction for s in scale]
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3130, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(__pyx_v_scale)) || PyTuple_CheckExact(__pyx_v_scale)) {
      __pyx_t_2 = __pyx_v_scale; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
      __pyx_t_4 = NULL;
    } else {
      __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_scale); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3130, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3130, __pyx_L5_error)
    }
    for (;;) {
      if (likely(!__pyx_t_4)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 3130, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3130, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 3130, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3130, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_4(__pyx_t_2);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 3130, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XDECREF_SET(__pyx_8genexpr5__pyx_v_s, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_5 = PyNumber_Multiply(__pyx_8genexpr5__pyx_v_s, __pyx_v_direction); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3130, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = PyNumber_Add(__pyx_v_pos, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3130, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_6))) __PYX_ERR(0, 3130, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_8genexpr5__pyx_v_s); __pyx_8genexpr5__pyx_v_s = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_8genexpr5__pyx_v_s); __pyx_8genexpr5__pyx_v_s = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_v_samples = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 3131: 
+3132:         return self.sample_latent(obs, fltr, Tf, infer_result, samples, contactMatrix,
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_sample_latent); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
+3133:                        generator, intervention_fun, tangent, inter_steps, nprocesses)
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[12] = {__pyx_t_6, __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_samples, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_inter_steps, __pyx_v_nprocesses};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_7, 11+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3132, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[12] = {__pyx_t_6, __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_samples, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_inter_steps, __pyx_v_nprocesses};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_7, 11+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3132, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(11+__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_INCREF(__pyx_v_obs);
    __Pyx_GIVEREF(__pyx_v_obs);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_7, __pyx_v_obs);
    __Pyx_INCREF(__pyx_v_fltr);
    __Pyx_GIVEREF(__pyx_v_fltr);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_7, __pyx_v_fltr);
    __Pyx_INCREF(__pyx_v_Tf);
    __Pyx_GIVEREF(__pyx_v_Tf);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_7, __pyx_v_Tf);
    __Pyx_INCREF(__pyx_v_infer_result);
    __Pyx_GIVEREF(__pyx_v_infer_result);
    PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_7, __pyx_v_infer_result);
    __Pyx_INCREF(__pyx_v_samples);
    __Pyx_GIVEREF(__pyx_v_samples);
    PyTuple_SET_ITEM(__pyx_t_5, 4+__pyx_t_7, __pyx_v_samples);
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_5, 5+__pyx_t_7, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_5, 6+__pyx_t_7, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_5, 7+__pyx_t_7, __pyx_v_intervention_fun);
    __Pyx_INCREF(__pyx_v_tangent);
    __Pyx_GIVEREF(__pyx_v_tangent);
    PyTuple_SET_ITEM(__pyx_t_5, 8+__pyx_t_7, __pyx_v_tangent);
    __Pyx_INCREF(__pyx_v_inter_steps);
    __Pyx_GIVEREF(__pyx_v_inter_steps);
    PyTuple_SET_ITEM(__pyx_t_5, 9+__pyx_t_7, __pyx_v_inter_steps);
    __Pyx_INCREF(__pyx_v_nprocesses);
    __Pyx_GIVEREF(__pyx_v_nprocesses);
    PyTuple_SET_ITEM(__pyx_t_5, 10+__pyx_t_7, __pyx_v_nprocesses);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 3134: 
+3135:     def sample_gaussian_latent(self, N, obs, fltr, Tf, infer_result, invcov, contactMatrix=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_97sample_gaussian_latent(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_96sample_gaussian_latent[] = "\n        Sample `N` samples of the parameters from the Gaussian centered at the MAP estimate with specified\n        covariance `cov`.\n        \n        Parameters\n        ----------\n        N: int\n            The number of samples.\n        obs:  np.array\n            The partially observed trajectory.\n        fltr: 2d np.array\n            The filter for the observation such that\n            :math:`F_{ij} x_j (t) = obs_i(t)`\n        Tf: float\n            The total time of the trajectory.\n        infer_result: dict\n            Dictionary returned by latent_infer\n        invcov: np.array\n            The inverse covariance matrix of the flat parameters.\n        contactMatrix: callable, optional\n            A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.\n            Either a contactMatrix or a generator must be specified.\n        generator: pyross.contactMatrix, optional\n            A pyross.contactMatrix object that generates a contact matrix function with specified lockdown\n            parameters.\n            Either a contactMatrix or a generator must be specified.\n        intervention_fun: callable, optional\n            The calling signature is `intervention_func(t, **kwargs)`,\n            where t is time and kwargs are other keyword arguments for the function.\n            The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.\n            The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.\n            If not set, assume intervention that's constant in time.\n            See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.\n        tangent: bool, optional\n            Set to True to use tangent space inference. Default is False.\n        allow_negative: bool, optional\n            Allow negative values of the sample parameters. If False, samples with negative paramters values are discarded \n       ""     and additional samples are drawn until the specified number `N` of samples is reached. Default is False.\n        inter_steps: int, optional\n            Intermediate steps between observations for the deterministic forward Euler integration. \n            A higher number of intermediate steps will improve the accuracy of the result, but will make computations slower. \n            Setting `inter_steps=0` will fall back to the method accessible via `det_method` for the deterministic integration.\n        nprocesses: int, optional\n            The number of processes used to compute the likelihood for the walkers, needs `pathos`. Default is\n            the number of cpu cores if `pathos` is available, otherwise 1.\n\n        Returns\n        -------\n        samples: list of np.array's\n            N samples of the Gaussian distribution (flat parameters).\n        posterior: np.array\n            posterior evaluated along the 1d slice\n        prior: np.array\n            prior evaluated along the 1d slice\n        \n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_97sample_gaussian_latent(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_N = 0;
  PyObject *__pyx_v_obs = 0;
  PyObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_infer_result = 0;
  PyObject *__pyx_v_invcov = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_inter_steps = 0;
  PyObject *__pyx_v_allow_negative = 0;
  PyObject *__pyx_v_nprocesses = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sample_gaussian_latent (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_N,&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_infer_result,&__pyx_n_s_invcov,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_tangent,&__pyx_n_s_inter_steps,&__pyx_n_s_allow_negative,&__pyx_n_s_nprocesses,0};
    PyObject* values[13] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[6] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_96sample_gaussian_latent(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_N, PyObject *__pyx_v_obs, PyObject *__pyx_v_fltr, PyObject *__pyx_v_Tf, PyObject *__pyx_v_infer_result, PyObject *__pyx_v_invcov, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_tangent, PyObject *__pyx_v_inter_steps, PyObject *__pyx_v_allow_negative, PyObject *__pyx_v_nprocesses) {
  PyObject *__pyx_v_mean = NULL;
  PyObject *__pyx_v_chol = NULL;
  PyObject *__pyx_v_L = NULL;
  PyObject *__pyx_v_uninormal = NULL;
  PyObject *__pyx_v_samples = NULL;
  PyObject *__pyx_v_xlist = NULL;
  PyObject *__pyx_v_ndx = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_x = NULL;
  PyObject *__pyx_v_s = NULL;
  PyObject *__pyx_v_posterior = NULL;
  PyObject *__pyx_v_prior = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sample_gaussian_latent", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyross.inference.SIR_type.sample_gaussian_latent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_mean);
  __Pyx_XDECREF(__pyx_v_chol);
  __Pyx_XDECREF(__pyx_v_L);
  __Pyx_XDECREF(__pyx_v_uninormal);
  __Pyx_XDECREF(__pyx_v_samples);
  __Pyx_XDECREF(__pyx_v_xlist);
  __Pyx_XDECREF(__pyx_v_ndx);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_x);
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_XDECREF(__pyx_v_posterior);
  __Pyx_XDECREF(__pyx_v_prior);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3136:                        generator=None, intervention_fun=None, tangent=False, inter_steps=0, allow_negative=False, nprocesses=0):
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject *)Py_False);
    values[10] = ((PyObject *)__pyx_int_0);
    values[11] = ((PyObject *)Py_False);
    values[12] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_gaussian_latent", 0, 6, 13, 1); __PYX_ERR(0, 3135, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_gaussian_latent", 0, 6, 13, 2); __PYX_ERR(0, 3135, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_gaussian_latent", 0, 6, 13, 3); __PYX_ERR(0, 3135, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_infer_result)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_gaussian_latent", 0, 6, 13, 4); __PYX_ERR(0, 3135, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_invcov)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_gaussian_latent", 0, 6, 13, 5); __PYX_ERR(0, 3135, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_allow_negative);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nprocesses);
          if (value) { values[12] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sample_gaussian_latent") < 0)) __PYX_ERR(0, 3135, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_N = values[0];
    __pyx_v_obs = values[1];
    __pyx_v_fltr = values[2];
    __pyx_v_Tf = values[3];
    __pyx_v_infer_result = values[4];
    __pyx_v_invcov = values[5];
    __pyx_v_contactMatrix = values[6];
    __pyx_v_generator = values[7];
    __pyx_v_intervention_fun = values[8];
    __pyx_v_tangent = values[9];
    __pyx_v_inter_steps = values[10];
    __pyx_v_allow_negative = values[11];
    __pyx_v_nprocesses = values[12];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("sample_gaussian_latent", 0, 6, 13, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3135, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.sample_gaussian_latent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_96sample_gaussian_latent(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_N, __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_invcov, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_inter_steps, __pyx_v_allow_negative, __pyx_v_nprocesses);
 3137:         """
 3138:         Sample `N` samples of the parameters from the Gaussian centered at the MAP estimate with specified
 3139:         covariance `cov`.
 3140:         
 3141:         Parameters
 3142:         ----------
 3143:         N: int
 3144:             The number of samples.
 3145:         obs:  np.array
 3146:             The partially observed trajectory.
 3147:         fltr: 2d np.array
 3148:             The filter for the observation such that
 3149:             :math:`F_{ij} x_j (t) = obs_i(t)`
 3150:         Tf: float
 3151:             The total time of the trajectory.
 3152:         infer_result: dict
 3153:             Dictionary returned by latent_infer
 3154:         invcov: np.array
 3155:             The inverse covariance matrix of the flat parameters.
 3156:         contactMatrix: callable, optional
 3157:             A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.
 3158:             Either a contactMatrix or a generator must be specified.
 3159:         generator: pyross.contactMatrix, optional
 3160:             A pyross.contactMatrix object that generates a contact matrix function with specified lockdown
 3161:             parameters.
 3162:             Either a contactMatrix or a generator must be specified.
 3163:         intervention_fun: callable, optional
 3164:             The calling signature is `intervention_func(t, **kwargs)`,
 3165:             where t is time and kwargs are other keyword arguments for the function.
 3166:             The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.
 3167:             The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.
 3168:             If not set, assume intervention that's constant in time.
 3169:             See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.
 3170:         tangent: bool, optional
 3171:             Set to True to use tangent space inference. Default is False.
 3172:         allow_negative: bool, optional
 3173:             Allow negative values of the sample parameters. If False, samples with negative paramters values are discarded 
 3174:             and additional samples are drawn until the specified number `N` of samples is reached. Default is False.
 3175:         inter_steps: int, optional
 3176:             Intermediate steps between observations for the deterministic forward Euler integration. 
 3177:             A higher number of intermediate steps will improve the accuracy of the result, but will make computations slower. 
 3178:             Setting `inter_steps=0` will fall back to the method accessible via `det_method` for the deterministic integration.
 3179:         nprocesses: int, optional
 3180:             The number of processes used to compute the likelihood for the walkers, needs `pathos`. Default is
 3181:             the number of cpu cores if `pathos` is available, otherwise 1.
 3182: 
 3183:         Returns
 3184:         -------
 3185:         samples: list of np.array's
 3186:             N samples of the Gaussian distribution (flat parameters).
 3187:         posterior: np.array
 3188:             posterior evaluated along the 1d slice
 3189:         prior: np.array
 3190:             prior evaluated along the 1d slice
 3191:         
 3192:         """
 3193: 
 3194: 
+3195:         mean = infer_result['flat_params']
  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_n_u_flat_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3195, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_mean = __pyx_t_1;
  __pyx_t_1 = 0;
 3196: 
+3197:         chol = cholesky(invcov, lower=False)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_cholesky); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3197, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3197, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_invcov);
  __Pyx_GIVEREF(__pyx_v_invcov);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_invcov);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3197, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_lower, Py_False) < 0) __PYX_ERR(0, 3197, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3197, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_chol = __pyx_t_4;
  __pyx_t_4 = 0;
+3198:         L = dtrtri(chol, lower=0)[0]
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_dtrtri); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_chol);
  __Pyx_GIVEREF(__pyx_v_chol);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_chol);
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_lower, __pyx_int_0) < 0) __PYX_ERR(0, 3198, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_L = __pyx_t_2;
  __pyx_t_2 = 0;
 3199: 
+3200:         uninormal=multivariate_normal(cov=np.eye(len(mean)))
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_multivariate_normal); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_eye); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = PyObject_Length(__pyx_v_mean); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3200, __pyx_L1_error)
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_7, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_cov_2, __pyx_t_3) < 0) __PYX_ERR(0, 3200, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_uninormal = __pyx_t_3;
  __pyx_t_3 = 0;
+3201:         samples=[]
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_samples = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+3202:         xlist=uninormal.rvs(1000000)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_uninormal, __pyx_n_s_rvs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_int_1000000) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_int_1000000);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_xlist = __pyx_t_3;
  __pyx_t_3 = 0;
+3203:         ndx=0
  __Pyx_INCREF(__pyx_int_0);
  __pyx_v_ndx = __pyx_int_0;
+3204:         for i in range(N):
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_v_N); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
    __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0;
    __pyx_t_8 = NULL;
  } else {
    __pyx_t_6 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3204, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3204, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  for (;;) {
    if (likely(!__pyx_t_8)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 3204, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3204, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 3204, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3204, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_8(__pyx_t_1);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 3204, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3205:             while True:
    while (1) {
+3206:                 x=xlist[ndx]
      __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_xlist, __pyx_v_ndx); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3206, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_3);
      __pyx_t_3 = 0;
+3207:                 ndx=ndx+1
      __pyx_t_3 = __Pyx_PyInt_AddObjC(__pyx_v_ndx, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3207, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_ndx, __pyx_t_3);
      __pyx_t_3 = 0;
+3208:                 if ndx>=len(xlist):
      __pyx_t_9 = PyObject_Length(__pyx_v_xlist); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3208, __pyx_L1_error)
      __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3208, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = PyObject_RichCompare(__pyx_v_ndx, __pyx_t_3, Py_GE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3208, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3208, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (__pyx_t_10) {
/* … */
      }
+3209:                     xlist=uninormal.rvs(len(xlist))
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_uninormal, __pyx_n_s_rvs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3209, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_9 = PyObject_Length(__pyx_v_xlist); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3209, __pyx_L1_error)
        __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3209, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_4 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
          }
        }
        __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5);
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3209, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF_SET(__pyx_v_xlist, __pyx_t_2);
        __pyx_t_2 = 0;
+3210:                     ndx=0
        __Pyx_INCREF(__pyx_int_0);
        __Pyx_DECREF_SET(__pyx_v_ndx, __pyx_int_0);
+3211:                 s=(L@x.T).T + mean
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s_T); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3211, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_L, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3211, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_T); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3211, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_v_mean); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3211, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF_SET(__pyx_v_s, __pyx_t_3);
      __pyx_t_3 = 0;
+3212:                 if np.min(s)>0 or allow_negative:
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3212, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_min); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3212, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_v_s) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_s);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3212, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3212, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 3212, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (!__pyx_t_11) {
      } else {
        __pyx_t_10 = __pyx_t_11;
        goto __pyx_L9_bool_binop_done;
      }
      __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_allow_negative); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 3212, __pyx_L1_error)
      __pyx_t_10 = __pyx_t_11;
      __pyx_L9_bool_binop_done:;
      if (__pyx_t_10) {
/* … */
      }
    }
    __pyx_L6_break:;
+3213:                     break
        goto __pyx_L6_break;
+3214:             samples.append(s)
    if (unlikely(!__pyx_v_s)) { __Pyx_RaiseUnboundLocalError("s"); __PYX_ERR(0, 3214, __pyx_L1_error) }
    __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_samples, __pyx_v_s); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 3214, __pyx_L1_error)
 3215: 
+3216:         posterior, prior = self.sample_latent(obs, fltr, Tf, infer_result, samples, contactMatrix,
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_sample_latent); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3216, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
/* … */
  __pyx_v_posterior = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_prior = __pyx_t_2;
  __pyx_t_2 = 0;
+3217:                                            generator, intervention_fun, tangent, inter_steps, nprocesses)
  __pyx_t_3 = NULL;
  __pyx_t_13 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_13 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[12] = {__pyx_t_3, __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_samples, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_inter_steps, __pyx_v_nprocesses};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_13, 11+__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3216, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[12] = {__pyx_t_3, __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_samples, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_inter_steps, __pyx_v_nprocesses};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_13, 11+__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3216, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_2 = PyTuple_New(11+__pyx_t_13); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_obs);
    __Pyx_GIVEREF(__pyx_v_obs);
    PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_13, __pyx_v_obs);
    __Pyx_INCREF(__pyx_v_fltr);
    __Pyx_GIVEREF(__pyx_v_fltr);
    PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_13, __pyx_v_fltr);
    __Pyx_INCREF(__pyx_v_Tf);
    __Pyx_GIVEREF(__pyx_v_Tf);
    PyTuple_SET_ITEM(__pyx_t_2, 2+__pyx_t_13, __pyx_v_Tf);
    __Pyx_INCREF(__pyx_v_infer_result);
    __Pyx_GIVEREF(__pyx_v_infer_result);
    PyTuple_SET_ITEM(__pyx_t_2, 3+__pyx_t_13, __pyx_v_infer_result);
    __Pyx_INCREF(__pyx_v_samples);
    __Pyx_GIVEREF(__pyx_v_samples);
    PyTuple_SET_ITEM(__pyx_t_2, 4+__pyx_t_13, __pyx_v_samples);
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_2, 5+__pyx_t_13, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_2, 6+__pyx_t_13, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_2, 7+__pyx_t_13, __pyx_v_intervention_fun);
    __Pyx_INCREF(__pyx_v_tangent);
    __Pyx_GIVEREF(__pyx_v_tangent);
    PyTuple_SET_ITEM(__pyx_t_2, 8+__pyx_t_13, __pyx_v_tangent);
    __Pyx_INCREF(__pyx_v_inter_steps);
    __Pyx_GIVEREF(__pyx_v_inter_steps);
    PyTuple_SET_ITEM(__pyx_t_2, 9+__pyx_t_13, __pyx_v_inter_steps);
    __Pyx_INCREF(__pyx_v_nprocesses);
    __Pyx_GIVEREF(__pyx_v_nprocesses);
    PyTuple_SET_ITEM(__pyx_t_2, 10+__pyx_t_13, __pyx_v_nprocesses);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 3216, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_2);
    #else
    __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_14 = Py_TYPE(__pyx_t_3)->tp_iternext;
    index = 0; __pyx_t_5 = __pyx_t_14(__pyx_t_3); if (unlikely(!__pyx_t_5)) goto __pyx_L11_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    index = 1; __pyx_t_2 = __pyx_t_14(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L11_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_3), 2) < 0) __PYX_ERR(0, 3216, __pyx_L1_error)
    __pyx_t_14 = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L12_unpacking_done;
    __pyx_L11_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_14 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 3216, __pyx_L1_error)
    __pyx_L12_unpacking_done:;
  }
 3218: 
+3219:         return samples, posterior, prior
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_samples);
  __Pyx_GIVEREF(__pyx_v_samples);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_samples);
  __Pyx_INCREF(__pyx_v_posterior);
  __Pyx_GIVEREF(__pyx_v_posterior);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_posterior);
  __Pyx_INCREF(__pyx_v_prior);
  __Pyx_GIVEREF(__pyx_v_prior);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_prior);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 3220: 
 3221: 
 3222: 
+3223:     def latent_evidence_laplace(self, obs, fltr, Tf, infer_result, contactMatrix=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_99latent_evidence_laplace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_98latent_evidence_laplace[] = "\n        Compute the evidence using a Laplace approximation at the MAP estimate for a SIR type model with partially observed classes. The unobserved classes are treated as latent variables.\n\n        Parameters\n        ----------\n        obs:  np.array\n            The partially observed trajectory.\n        fltr: 2d np.array\n            The filter for the observation such that\n            :math:`F_{ij} x_j (t) = obs_i(t)`\n        Tf: float\n            Total time of the trajectory\n        infer_result: dict\n            Dictionary returned by latent_infer\n        contactMatrix: callable, optional\n            A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.\n            Either a contactMatrix or a generator must be specified.\n        generator: pyross.contactMatrix, optional\n            A pyross.contactMatrix object that generates a contact matrix function with specified lockdown\n            parameters.\n            Either a contactMatrix or a generator must be specified.\n        intervention_fun: callable, optional\n            The calling signature is `intervention_func(t, **kwargs)`,\n            where t is time and kwargs are other keyword arguments for the function.\n            The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.\n            The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.\n            If not set, assume intervention that's constant in time.\n            See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.\n        tangent: bool, optional\n            Set to True to use tangent space inference. Default is False.\n        eps: float or numpy.array, optional\n            Step size for finite differences computation of the hessian with respect to the parameters. Must be either a scalar, or an array of length `len(infer_result['flat_params'])`. If not specified, \n            \n         ""   .. code-block:: python\n\n               eps = 100*infer_result['flat_params'] \n                     *numpy.divide(numpy.spacing(infer_result['log_likelihood']),\n                     infer_result['log_likelihood'])**(0.25) \n\n            is used. For `fd_method=\"central\"` it is recommended to use a step-size greater or equal to `eps`. \n            Decreasing the step size too small can result in round-off error.\n        fd_method: str, optional\n            The type of finite-difference scheme used to compute the hessian, supports \"forward\" and \"central\". Default is \"central\".\n        inter_steps: int, optional\n            Intermediate steps between observations for the deterministic forward Euler integration. \n            A higher number of intermediate steps will improve the accuracy of the result, but will make \n            computations slower. Setting `inter_steps=0` will fall back to the method accessible via `det_method` \n            for the deterministic integration. We have found that forward Euler is generally slower, \n            but more stable for derivatives with respect to parameters than the variable step size integrators used elsewhere in pyross. Default is 100.\n        Returns\n        -------\n        log_evidence: float\n            The log-evidence computed via Laplace approximation at the MAP estimate.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_99latent_evidence_laplace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_obs = 0;
  PyObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_infer_result = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_eps = 0;
  PyObject *__pyx_v_fd_method = 0;
  PyObject *__pyx_v_inter_steps = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_evidence_laplace (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_infer_result,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_tangent,&__pyx_n_s_eps,&__pyx_n_s_fd_method,&__pyx_n_s_inter_steps,0};
    PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0};
    values[4] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_98latent_evidence_laplace(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_obs, PyObject *__pyx_v_fltr, PyObject *__pyx_v_Tf, PyObject *__pyx_v_infer_result, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, PyObject *__pyx_v_tangent, PyObject *__pyx_v_eps, PyObject *__pyx_v_fd_method, PyObject *__pyx_v_inter_steps) {
  PyObject *__pyx_v_logP_MAPs = NULL;
  PyObject *__pyx_v_A = NULL;
  PyObject *__pyx_v_k = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("latent_evidence_laplace", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_evidence_laplace", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_logP_MAPs);
  __Pyx_XDECREF(__pyx_v_A);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3224:                        generator=None, intervention_fun=None, tangent=False,
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject *)Py_False);
+3225:                        eps=None, fd_method="central", inter_steps=100):
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject *)__pyx_n_u_central);
    values[10] = ((PyObject *)__pyx_int_100);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_evidence_laplace", 0, 4, 11, 1); __PYX_ERR(0, 3223, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_evidence_laplace", 0, 4, 11, 2); __PYX_ERR(0, 3223, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_infer_result)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("latent_evidence_laplace", 0, 4, 11, 3); __PYX_ERR(0, 3223, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fd_method);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[10] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "latent_evidence_laplace") < 0)) __PYX_ERR(0, 3223, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obs = values[0];
    __pyx_v_fltr = values[1];
    __pyx_v_Tf = values[2];
    __pyx_v_infer_result = values[3];
    __pyx_v_contactMatrix = values[4];
    __pyx_v_generator = values[5];
    __pyx_v_intervention_fun = values[6];
    __pyx_v_tangent = values[7];
    __pyx_v_eps = values[8];
    __pyx_v_fd_method = values[9];
    __pyx_v_inter_steps = values[10];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("latent_evidence_laplace", 0, 4, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3223, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.latent_evidence_laplace", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_98latent_evidence_laplace(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_eps, __pyx_v_fd_method, __pyx_v_inter_steps);
 3226:         """
 3227:         Compute the evidence using a Laplace approximation at the MAP estimate for a SIR type model with partially observed classes. The unobserved classes are treated as latent variables.
 3228: 
 3229:         Parameters
 3230:         ----------
 3231:         obs:  np.array
 3232:             The partially observed trajectory.
 3233:         fltr: 2d np.array
 3234:             The filter for the observation such that
 3235:             :math:`F_{ij} x_j (t) = obs_i(t)`
 3236:         Tf: float
 3237:             Total time of the trajectory
 3238:         infer_result: dict
 3239:             Dictionary returned by latent_infer
 3240:         contactMatrix: callable, optional
 3241:             A function that returns the contact matrix at time t (input). If specified, control parameters are not inferred.
 3242:             Either a contactMatrix or a generator must be specified.
 3243:         generator: pyross.contactMatrix, optional
 3244:             A pyross.contactMatrix object that generates a contact matrix function with specified lockdown
 3245:             parameters.
 3246:             Either a contactMatrix or a generator must be specified.
 3247:         intervention_fun: callable, optional
 3248:             The calling signature is `intervention_func(t, **kwargs)`,
 3249:             where t is time and kwargs are other keyword arguments for the function.
 3250:             The function must return (aW, aS, aO), where aW, aS and aO are (2, M) arrays.
 3251:             The contact matrices are then rescaled as :math:`aW[0]_i CW_{ij} aW[1]_j` etc.
 3252:             If not set, assume intervention that's constant in time.
 3253:             See `contactMatrix.constant_contactMatrix` for details on the keyword parameters.
 3254:         tangent: bool, optional
 3255:             Set to True to use tangent space inference. Default is False.
 3256:         eps: float or numpy.array, optional
 3257:             Step size for finite differences computation of the hessian with respect to the parameters. Must be either a scalar, or an array of length `len(infer_result['flat_params'])`. If not specified, 
 3258:             
 3259:             .. code-block:: python
 3260: 
 3261:                eps = 100*infer_result['flat_params'] 
 3262:                      *numpy.divide(numpy.spacing(infer_result['log_likelihood']),
 3263:                      infer_result['log_likelihood'])**(0.25) 
 3264: 
 3265:             is used. For `fd_method="central"` it is recommended to use a step-size greater or equal to `eps`. 
 3266:             Decreasing the step size too small can result in round-off error.
 3267:         fd_method: str, optional
 3268:             The type of finite-difference scheme used to compute the hessian, supports "forward" and "central". Default is "central".
 3269:         inter_steps: int, optional
 3270:             Intermediate steps between observations for the deterministic forward Euler integration. 
 3271:             A higher number of intermediate steps will improve the accuracy of the result, but will make 
 3272:             computations slower. Setting `inter_steps=0` will fall back to the method accessible via `det_method` 
 3273:             for the deterministic integration. We have found that forward Euler is generally slower, 
 3274:             but more stable for derivatives with respect to parameters than the variable step size integrators used elsewhere in pyross. Default is 100.
 3275:         Returns
 3276:         -------
 3277:         log_evidence: float
 3278:             The log-evidence computed via Laplace approximation at the MAP estimate.
 3279:         """
+3280:         logP_MAPs = infer_result['log_posterior']
  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_n_u_log_posterior); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3280, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_logP_MAPs = __pyx_t_1;
  __pyx_t_1 = 0;
+3281:         A = self.latent_hessian(obs, fltr, Tf, infer_result, contactMatrix,
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_latent_hessian); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3281, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
 3282:                 generator, intervention_fun, tangent, eps, fd_method,
+3283:                 inter_steps)
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[12] = {__pyx_t_3, __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_eps, __pyx_v_fd_method, __pyx_v_inter_steps};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 11+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3281, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[12] = {__pyx_t_3, __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_eps, __pyx_v_fd_method, __pyx_v_inter_steps};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 11+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3281, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(11+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3281, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_obs);
    __Pyx_GIVEREF(__pyx_v_obs);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_obs);
    __Pyx_INCREF(__pyx_v_fltr);
    __Pyx_GIVEREF(__pyx_v_fltr);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_fltr);
    __Pyx_INCREF(__pyx_v_Tf);
    __Pyx_GIVEREF(__pyx_v_Tf);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_Tf);
    __Pyx_INCREF(__pyx_v_infer_result);
    __Pyx_GIVEREF(__pyx_v_infer_result);
    PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_v_infer_result);
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_5, 4+__pyx_t_4, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_5, 5+__pyx_t_4, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_5, 6+__pyx_t_4, __pyx_v_intervention_fun);
    __Pyx_INCREF(__pyx_v_tangent);
    __Pyx_GIVEREF(__pyx_v_tangent);
    PyTuple_SET_ITEM(__pyx_t_5, 7+__pyx_t_4, __pyx_v_tangent);
    __Pyx_INCREF(__pyx_v_eps);
    __Pyx_GIVEREF(__pyx_v_eps);
    PyTuple_SET_ITEM(__pyx_t_5, 8+__pyx_t_4, __pyx_v_eps);
    __Pyx_INCREF(__pyx_v_fd_method);
    __Pyx_GIVEREF(__pyx_v_fd_method);
    PyTuple_SET_ITEM(__pyx_t_5, 9+__pyx_t_4, __pyx_v_fd_method);
    __Pyx_INCREF(__pyx_v_inter_steps);
    __Pyx_GIVEREF(__pyx_v_inter_steps);
    PyTuple_SET_ITEM(__pyx_t_5, 10+__pyx_t_4, __pyx_v_inter_steps);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3281, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_A = __pyx_t_1;
  __pyx_t_1 = 0;
+3284:         k = A.shape[0]
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_A, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_k = __pyx_t_2;
  __pyx_t_2 = 0;
 3285: 
+3286:         return logP_MAPs - 0.5*np.log(np.linalg.det(A)) + 0.5*k*np.log(2*np.pi)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_log); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_linalg); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_det); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_6, __pyx_v_A) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_A);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Multiply(__pyx_float_0_5, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Subtract(__pyx_v_logP_MAPs, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Multiply(__pyx_float_0_5, __pyx_v_k); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_log); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_pi); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Multiply(__pyx_int_2, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyNumber_Multiply(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 3287: 
 3288: 
+3289:     def minus_logp_red(self, parameters, np.ndarray x0, np.ndarray obs,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_101minus_logp_red(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_100minus_logp_red[] = "Computes -logp for a latent trajectory\n\n        Parameters\n        ----------\n        parameters: dict\n            A dictionary of parameter values, same as the ones required for initialisation.\n        x0: numpy.array\n            Initial conditions\n        obs: numpy.array\n            The observed trajectory without the initial datapoint\n        fltr: boolean sequence or array\n            True for observed and False for unobserved.\n            e.g. if only Is is known for SIR with one age group, fltr = [False, False, True]\n        Tf: float\n            The total time of the trajectory\n        contactMatrix: callable\n            A function that returns the contact matrix at time t (input).\n        tangent: bool, optional\n            Set to True to do inference in tangent space (might be less robust but a lot faster). Default is False.\n\n        Returns\n        -------\n        minus_logp: float\n            -log(p) for the observed trajectory with the given parameters and initial conditions\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_101minus_logp_red(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_parameters = 0;
  PyArrayObject *__pyx_v_x0 = 0;
  PyArrayObject *__pyx_v_obs = 0;
  PyArrayObject *__pyx_v_fltr = 0;
  double __pyx_v_Tf;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_tangent = 0;
  PyObject *__pyx_v_objective = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("minus_logp_red (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_parameters,&__pyx_n_s_x0,&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_contactMatrix,&__pyx_n_s_tangent,&__pyx_n_s_objective,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_100minus_logp_red(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_parameters, PyArrayObject *__pyx_v_x0, PyArrayObject *__pyx_v_obs, PyArrayObject *__pyx_v_fltr, double __pyx_v_Tf, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_tangent, PyObject *__pyx_v_objective) {
  CYTHON_UNUSED Py_ssize_t __pyx_v_nClass;
  PyObject *__pyx_v_obs0 = NULL;
  PyObject *__pyx_v_x0_obs = NULL;
  double __pyx_v_minus_logp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("minus_logp_red", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_obs);
  __Pyx_INCREF((PyObject *)__pyx_v_fltr);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.minus_logp_red", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_obs0);
  __Pyx_XDECREF(__pyx_v_x0_obs);
  __Pyx_XDECREF((PyObject *)__pyx_v_obs);
  __Pyx_XDECREF((PyObject *)__pyx_v_fltr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3290:                             np.ndarray fltr, double Tf, contactMatrix, tangent=False, objective='likelihood'):
    values[6] = ((PyObject *)Py_False);
    values[7] = ((PyObject *)__pyx_n_u_likelihood);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_parameters)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("minus_logp_red", 0, 6, 8, 1); __PYX_ERR(0, 3289, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("minus_logp_red", 0, 6, 8, 2); __PYX_ERR(0, 3289, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("minus_logp_red", 0, 6, 8, 3); __PYX_ERR(0, 3289, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("minus_logp_red", 0, 6, 8, 4); __PYX_ERR(0, 3289, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("minus_logp_red", 0, 6, 8, 5); __PYX_ERR(0, 3289, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_objective);
          if (value) { values[7] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "minus_logp_red") < 0)) __PYX_ERR(0, 3289, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_parameters = values[0];
    __pyx_v_x0 = ((PyArrayObject *)values[1]);
    __pyx_v_obs = ((PyArrayObject *)values[2]);
    __pyx_v_fltr = ((PyArrayObject *)values[3]);
    __pyx_v_Tf = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_Tf == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3290, __pyx_L3_error)
    __pyx_v_contactMatrix = values[5];
    __pyx_v_tangent = values[6];
    __pyx_v_objective = values[7];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("minus_logp_red", 0, 6, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3289, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.minus_logp_red", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x0), __pyx_ptype_5numpy_ndarray, 1, "x0", 0))) __PYX_ERR(0, 3289, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obs), __pyx_ptype_5numpy_ndarray, 1, "obs", 0))) __PYX_ERR(0, 3289, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fltr), __pyx_ptype_5numpy_ndarray, 1, "fltr", 0))) __PYX_ERR(0, 3290, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_100minus_logp_red(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_parameters, __pyx_v_x0, __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_contactMatrix, __pyx_v_tangent, __pyx_v_objective);
 3291:         """Computes -logp for a latent trajectory
 3292: 
 3293:         Parameters
 3294:         ----------
 3295:         parameters: dict
 3296:             A dictionary of parameter values, same as the ones required for initialisation.
 3297:         x0: numpy.array
 3298:             Initial conditions
 3299:         obs: numpy.array
 3300:             The observed trajectory without the initial datapoint
 3301:         fltr: boolean sequence or array
 3302:             True for observed and False for unobserved.
 3303:             e.g. if only Is is known for SIR with one age group, fltr = [False, False, True]
 3304:         Tf: float
 3305:             The total time of the trajectory
 3306:         contactMatrix: callable
 3307:             A function that returns the contact matrix at time t (input).
 3308:         tangent: bool, optional
 3309:             Set to True to do inference in tangent space (might be less robust but a lot faster). Default is False.
 3310: 
 3311:         Returns
 3312:         -------
 3313:         minus_logp: float
 3314:             -log(p) for the observed trajectory with the given parameters and initial conditions
 3315:         """
 3316: 
 3317:         cdef double minus_log_p
+3318:         cdef Py_ssize_t nClass=int(self.dim/self.M)
  __pyx_v_nClass = (__pyx_v_self->dim / __pyx_v_self->M);
+3319:         self.contactMatrix = contactMatrix
  __Pyx_INCREF(__pyx_v_contactMatrix);
  __Pyx_GIVEREF(__pyx_v_contactMatrix);
  __Pyx_GOTREF(__pyx_v_self->contactMatrix);
  __Pyx_DECREF(__pyx_v_self->contactMatrix);
  __pyx_v_self->contactMatrix = __pyx_v_contactMatrix;
+3320:         fltr, obs, obs0 = pyross.utils.process_latent_data(fltr, obs)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_process_latent_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, ((PyObject *)__pyx_v_fltr), ((PyObject *)__pyx_v_obs)};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3320, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, ((PyObject *)__pyx_v_fltr), ((PyObject *)__pyx_v_obs)};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3320, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3320, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_v_fltr));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_fltr));
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, ((PyObject *)__pyx_v_fltr));
    __Pyx_INCREF(((PyObject *)__pyx_v_obs));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_obs));
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, ((PyObject *)__pyx_v_obs));
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3320, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 3320, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3320, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3320, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3320, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3320, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    index = 2; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 3) < 0) __PYX_ERR(0, 3320, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 3320, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3320, __pyx_L1_error)
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3320, __pyx_L1_error)
  __Pyx_DECREF_SET(__pyx_v_fltr, ((PyArrayObject *)__pyx_t_2));
  __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_obs, ((PyArrayObject *)__pyx_t_5));
  __pyx_t_5 = 0;
  __pyx_v_obs0 = __pyx_t_3;
  __pyx_t_3 = 0;
 3321: 
 3322:         # check that x0 is consistent with obs0
+3323:         x0_obs = fltr[0].dot(x0)
  __pyx_t_3 = __Pyx_GetItemInt(((PyObject *)__pyx_v_fltr), 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3323, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_dot); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3323, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, ((PyObject *)__pyx_v_x0)) : __Pyx_PyObject_CallOneArg(__pyx_t_5, ((PyObject *)__pyx_v_x0));
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3323, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_x0_obs = __pyx_t_1;
  __pyx_t_1 = 0;
+3324:         if not np.allclose(x0_obs, obs0):
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_allclose); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_x0_obs, __pyx_v_obs0};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3324, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_x0_obs, __pyx_v_obs0};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3324, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_2 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3324, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_v_x0_obs);
    __Pyx_GIVEREF(__pyx_v_x0_obs);
    PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_4, __pyx_v_x0_obs);
    __Pyx_INCREF(__pyx_v_obs0);
    __Pyx_GIVEREF(__pyx_v_obs0);
    PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_4, __pyx_v_obs0);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3324, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 3324, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_9 = ((!__pyx_t_8) != 0);
  if (__pyx_t_9) {
/* … */
  }
+3325:             print('x0 not consistent with obs0. '
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__30, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3325, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple__30 = PyTuple_Pack(1, __pyx_kp_u_x0_not_consistent_with_obs0_Usin); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 3325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__30);
  __Pyx_GIVEREF(__pyx_tuple__30);
 3326:                   'Using x0 in the calculation of logp...')
+3327:         self.set_params(parameters)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_params); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3327, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_parameters);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3327, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3328:         if objective == 'likelihood':
  __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_objective, __pyx_n_u_likelihood, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 3328, __pyx_L1_error)
  if (__pyx_t_9) {
/* … */
    goto __pyx_L6;
  }
+3329:             minus_logp = self._obtain_logp_for_lat_traj(x0, obs, fltr[1:], Tf, tangent)
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_x0), PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 3329, __pyx_L1_error)
    __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_obs), PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 3329, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_GetSlice(((PyObject *)__pyx_v_fltr), 1, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3329, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3329, __pyx_L1_error)
    __pyx_t_13.__pyx_n = 1;
    __pyx_t_13.tangent = __pyx_v_tangent;
    __pyx_t_12 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->_obtain_logp_for_lat_traj(__pyx_v_self, __pyx_t_10, __pyx_t_11, ((PyArrayObject *)__pyx_t_1), __pyx_v_Tf, &__pyx_t_13); 
    __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
    __pyx_t_10.memview = NULL;
    __pyx_t_10.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
    __pyx_t_11.memview = NULL;
    __pyx_t_11.data = NULL;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_minus_logp = __pyx_t_12;
+3330:         elif objective == 'least_squares':
  __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_objective, __pyx_n_u_least_squares, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 3330, __pyx_L1_error)
  if (__pyx_t_9) {
/* … */
    goto __pyx_L6;
  }
+3331:             minus_logp = self._obtain_square_dev_for_lat_traj(x0, obs, fltr[1:], Tf)
    __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_x0), PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 3331, __pyx_L1_error)
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_obs), PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 3331, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_GetSlice(((PyObject *)__pyx_v_fltr), 1, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3331, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3331, __pyx_L1_error)
    __pyx_v_minus_logp = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->_obtain_square_dev_for_lat_traj(__pyx_v_self, __pyx_t_11, __pyx_t_10, ((PyArrayObject *)__pyx_t_1), __pyx_v_Tf);
    __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
    __pyx_t_11.memview = NULL;
    __pyx_t_11.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
    __pyx_t_10.memview = NULL;
    __pyx_t_10.data = NULL;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3332:         elif objective == 'least_squares_diff':
  __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_objective, __pyx_n_u_least_squares_diff, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 3332, __pyx_L1_error)
  if (likely(__pyx_t_9)) {
/* … */
    goto __pyx_L6;
  }
+3333:             minus_logp = self._obtain_square_dev_for_lat_traj_diff(x0, obs, fltr[1:], Tf)
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_x0), PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 3333, __pyx_L1_error)
    __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_obs), PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 3333, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_GetSlice(((PyObject *)__pyx_v_fltr), 1, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3333, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3333, __pyx_L1_error)
    __pyx_v_minus_logp = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->_obtain_square_dev_for_lat_traj_diff(__pyx_v_self, __pyx_t_10, __pyx_t_11, ((PyArrayObject *)__pyx_t_1), __pyx_v_Tf);
    __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
    __pyx_t_10.memview = NULL;
    __pyx_t_10.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
    __pyx_t_11.memview = NULL;
    __pyx_t_11.data = NULL;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3334:         else:
+3335:             raise Exception('Unknown objective')
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3335, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 3335, __pyx_L1_error)
  }
  __pyx_L6:;
+3336:         return minus_logp
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_minus_logp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 3337: 
+3338:     def sample_endpoints(self, obs, fltr, Tf, infer_result, nsamples, contactMatrix=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_103sample_endpoints(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_103sample_endpoints(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_obs = 0;
  PyObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_infer_result = 0;
  PyObject *__pyx_v_nsamples = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tangent = 0;
  CYTHON_UNUSED PyObject *__pyx_v_inter_steps = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sample_endpoints (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_infer_result,&__pyx_n_s_nsamples,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_tangent,&__pyx_n_s_inter_steps,0};
    PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0};
    values[5] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_102sample_endpoints(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_obs, PyObject *__pyx_v_fltr, PyObject *__pyx_v_Tf, PyObject *__pyx_v_infer_result, PyObject *__pyx_v_nsamples, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, CYTHON_UNUSED PyObject *__pyx_v_tangent, CYTHON_UNUSED PyObject *__pyx_v_inter_steps) {
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_v_x0 = NULL;
  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
  PyObject *__pyx_v_mean = NULL;
  PyObject *__pyx_v_cov = NULL;
  PyObject *__pyx_v_null_space = NULL;
  PyObject *__pyx_v_known_space = NULL;
  PyObject *__pyx_v_partial_inits = NULL;
  PyObject *__pyx_v_inits = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sample_endpoints", 0);
  __Pyx_INCREF(__pyx_v_obs);
  __Pyx_INCREF(__pyx_v_fltr);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pyross.inference.SIR_type.sample_endpoints", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_x0);
  __Pyx_XDECREF(__pyx_v__);
  __Pyx_XDECREF(__pyx_v_mean);
  __Pyx_XDECREF(__pyx_v_cov);
  __Pyx_XDECREF(__pyx_v_null_space);
  __Pyx_XDECREF(__pyx_v_known_space);
  __Pyx_XDECREF(__pyx_v_partial_inits);
  __Pyx_XDECREF(__pyx_v_inits);
  __Pyx_XDECREF(__pyx_v_obs);
  __Pyx_XDECREF(__pyx_v_fltr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3339:                        generator=None, intervention_fun=None, tangent=False,
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)Py_False);
    values[9] = ((PyObject *)__pyx_int_100);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_endpoints", 0, 5, 10, 1); __PYX_ERR(0, 3338, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_endpoints", 0, 5, 10, 2); __PYX_ERR(0, 3338, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_infer_result)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_endpoints", 0, 5, 10, 3); __PYX_ERR(0, 3338, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nsamples)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_endpoints", 0, 5, 10, 4); __PYX_ERR(0, 3338, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[9] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sample_endpoints") < 0)) __PYX_ERR(0, 3338, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obs = values[0];
    __pyx_v_fltr = values[1];
    __pyx_v_Tf = values[2];
    __pyx_v_infer_result = values[3];
    __pyx_v_nsamples = values[4];
    __pyx_v_contactMatrix = values[5];
    __pyx_v_generator = values[6];
    __pyx_v_intervention_fun = values[7];
    __pyx_v_tangent = values[8];
    __pyx_v_inter_steps = values[9];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("sample_endpoints", 0, 5, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3338, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.sample_endpoints", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_102sample_endpoints(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_nsamples, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_inter_steps);
 3340:                        inter_steps=100):
 3341:         cdef Py_ssize_t i
+3342:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3342, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3342, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3342, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_intervention_fun);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3342, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3343:         x0 = infer_result['x0'].copy()
  __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_n_u_x0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_x0 = __pyx_t_1;
  __pyx_t_1 = 0;
+3344:         fltr, obs, _ = pyross.utils.process_latent_data(fltr, obs)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyross); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_utils); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_process_latent_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_fltr, __pyx_v_obs};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3344, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_fltr, __pyx_v_obs};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3344, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_3 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3344, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_v_fltr);
    __Pyx_GIVEREF(__pyx_v_fltr);
    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_4, __pyx_v_fltr);
    __Pyx_INCREF(__pyx_v_obs);
    __Pyx_GIVEREF(__pyx_v_obs);
    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_4, __pyx_v_obs);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3344, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 3344, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    #else
    __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3344, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3344, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3344, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3344, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    index = 0; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    index = 1; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 2; __pyx_t_2 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 3) < 0) __PYX_ERR(0, 3344, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 3344, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __Pyx_DECREF_SET(__pyx_v_fltr, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_DECREF_SET(__pyx_v_obs, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_v__ = __pyx_t_2;
  __pyx_t_2 = 0;
+3345:         self.set_params(infer_result['params_dict'])
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_params); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3345, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_n_u_params_dict); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3345, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3345, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3346:         mean, cov, null_space, known_space = self._mean_cov_for_lat_endpoint(x0, obs, fltr[1:], Tf)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_mean_cov_for_lat_endpoint); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3346, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_fltr, 1, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3346, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[5] = {__pyx_t_5, __pyx_v_x0, __pyx_v_obs, __pyx_t_3, __pyx_v_Tf};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3346, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[5] = {__pyx_t_5, __pyx_v_x0, __pyx_v_obs, __pyx_t_3, __pyx_v_Tf};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3346, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_v_x0);
    __Pyx_GIVEREF(__pyx_v_x0);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_4, __pyx_v_x0);
    __Pyx_INCREF(__pyx_v_obs);
    __Pyx_GIVEREF(__pyx_v_obs);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_4, __pyx_v_obs);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_4, __pyx_t_3);
    __Pyx_INCREF(__pyx_v_Tf);
    __Pyx_GIVEREF(__pyx_v_Tf);
    PyTuple_SET_ITEM(__pyx_t_6, 3+__pyx_t_4, __pyx_v_Tf);
    __pyx_t_3 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 3346, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_5);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_6,&__pyx_t_3,&__pyx_t_5};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 3346, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_6,&__pyx_t_3,&__pyx_t_5};
    __pyx_t_8 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_8)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_7(__pyx_t_8); if (unlikely(!item)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_8), 4) < 0) __PYX_ERR(0, 3346, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 3346, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  __pyx_v_mean = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_cov = __pyx_t_6;
  __pyx_t_6 = 0;
  __pyx_v_null_space = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_known_space = __pyx_t_5;
  __pyx_t_5 = 0;
+3347:         partial_inits = np.random.multivariate_normal(mean, cov, nsamples)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_random); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_multivariate_normal); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_mean, __pyx_v_cov, __pyx_v_nsamples};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3347, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_mean, __pyx_v_cov, __pyx_v_nsamples};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3347, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_mean);
    __Pyx_GIVEREF(__pyx_v_mean);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_4, __pyx_v_mean);
    __Pyx_INCREF(__pyx_v_cov);
    __Pyx_GIVEREF(__pyx_v_cov);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_4, __pyx_v_cov);
    __Pyx_INCREF(__pyx_v_nsamples);
    __Pyx_GIVEREF(__pyx_v_nsamples);
    PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_4, __pyx_v_nsamples);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_partial_inits = __pyx_t_1;
  __pyx_t_1 = 0;
+3348:         inits = (null_space.T@partial_inits.T).T + known_space
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_null_space, __pyx_n_s_T); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_partial_inits, __pyx_n_s_T); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_T); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_v_known_space); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_inits = __pyx_t_6;
  __pyx_t_6 = 0;
+3349:         for i in range(nsamples):
  __pyx_t_9 = __Pyx_PyInt_As_long(__pyx_v_nsamples); if (unlikely((__pyx_t_9 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 3349, __pyx_L1_error)
  __pyx_t_10 = __pyx_t_9;
  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
    __pyx_v_i = __pyx_t_11;
+3350:             while not self._all_positive(inits[i]):
    while (1) {
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_all_positive); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3350, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_inits, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3350, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_6 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3350, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 3350, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_13 = ((!__pyx_t_12) != 0);
      if (!__pyx_t_13) break;
+3351:                 partial_inits = np.random.multivariate_normal(mean, cov)
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3351, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_random); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3351, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multivariate_normal); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3351, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
          __pyx_t_4 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_mean, __pyx_v_cov};
        __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3351, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_6);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_mean, __pyx_v_cov};
        __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3351, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_6);
      } else
      #endif
      {
        __pyx_t_3 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3351, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (__pyx_t_1) {
          __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __pyx_t_1 = NULL;
        }
        __Pyx_INCREF(__pyx_v_mean);
        __Pyx_GIVEREF(__pyx_v_mean);
        PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_4, __pyx_v_mean);
        __Pyx_INCREF(__pyx_v_cov);
        __Pyx_GIVEREF(__pyx_v_cov);
        PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_4, __pyx_v_cov);
        __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3351, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF_SET(__pyx_v_partial_inits, __pyx_t_6);
      __pyx_t_6 = 0;
+3352:                 inits[i] = (null_space.T@partial_inits) + known_space
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_null_space, __pyx_n_s_T); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3352, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_6, __pyx_v_partial_inits); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3352, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_v_known_space); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3352, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(__Pyx_SetItemInt(__pyx_v_inits, __pyx_v_i, __pyx_t_6, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0)) __PYX_ERR(0, 3352, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
  }
+3353:         return inits
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_inits);
  __pyx_r = __pyx_v_inits;
  goto __pyx_L0;
 3354: 
+3355:     def sample_trajs(self, obs, fltr, Tf, infer_result, nsamples, contactMatrix=None,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_105sample_trajs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_105sample_trajs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_obs = 0;
  PyObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_Tf = 0;
  PyObject *__pyx_v_infer_result = 0;
  PyObject *__pyx_v_nsamples = 0;
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tangent = 0;
  CYTHON_UNUSED PyObject *__pyx_v_inter_steps = 0;
  PyObject *__pyx_v_require_positive = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sample_trajs (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_infer_result,&__pyx_n_s_nsamples,&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,&__pyx_n_s_tangent,&__pyx_n_s_inter_steps,&__pyx_n_s_require_positive,0};
    PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0};
    values[5] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_104sample_trajs(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_obs, PyObject *__pyx_v_fltr, PyObject *__pyx_v_Tf, PyObject *__pyx_v_infer_result, PyObject *__pyx_v_nsamples, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun, CYTHON_UNUSED PyObject *__pyx_v_tangent, CYTHON_UNUSED PyObject *__pyx_v_inter_steps, PyObject *__pyx_v_require_positive) {
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_Nf;
  PyObject *__pyx_v_x0 = NULL;
  PyObject *__pyx_v_mean = NULL;
  PyObject *__pyx_v_cov = NULL;
  PyObject *__pyx_v_full_null_space = NULL;
  PyObject *__pyx_v_known_space = NULL;
  PyObject *__pyx_v_trajs = NULL;
  PyObject *__pyx_v_partial_trajs = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sample_trajs", 0);
  __Pyx_INCREF(__pyx_v_fltr);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pyross.inference.SIR_type.sample_trajs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_x0);
  __Pyx_XDECREF(__pyx_v_mean);
  __Pyx_XDECREF(__pyx_v_cov);
  __Pyx_XDECREF(__pyx_v_full_null_space);
  __Pyx_XDECREF(__pyx_v_known_space);
  __Pyx_XDECREF(__pyx_v_trajs);
  __Pyx_XDECREF(__pyx_v_partial_trajs);
  __Pyx_XDECREF(__pyx_v_fltr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3356:                        generator=None, intervention_fun=None, tangent=False,
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)Py_False);
    values[9] = ((PyObject *)__pyx_int_100);
+3357:                        inter_steps=100, require_positive=True):
    values[10] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_trajs", 0, 5, 11, 1); __PYX_ERR(0, 3355, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_trajs", 0, 5, 11, 2); __PYX_ERR(0, 3355, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_infer_result)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_trajs", 0, 5, 11, 3); __PYX_ERR(0, 3355, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nsamples)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sample_trajs", 0, 5, 11, 4); __PYX_ERR(0, 3355, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_require_positive);
          if (value) { values[10] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sample_trajs") < 0)) __PYX_ERR(0, 3355, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obs = values[0];
    __pyx_v_fltr = values[1];
    __pyx_v_Tf = values[2];
    __pyx_v_infer_result = values[3];
    __pyx_v_nsamples = values[4];
    __pyx_v_contactMatrix = values[5];
    __pyx_v_generator = values[6];
    __pyx_v_intervention_fun = values[7];
    __pyx_v_tangent = values[8];
    __pyx_v_inter_steps = values[9];
    __pyx_v_require_positive = values[10];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("sample_trajs", 0, 5, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3355, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.sample_trajs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_104sample_trajs(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_infer_result, __pyx_v_nsamples, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun, __pyx_v_tangent, __pyx_v_inter_steps, __pyx_v_require_positive);
+3358:         cdef Py_ssize_t i, Nf=obs.shape[0]
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_obs, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 3358, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_Nf = __pyx_t_3;
+3359:         self._process_contact_matrix(contactMatrix, generator, intervention_fun)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_process_contact_matrix); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3359, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3359, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3359, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_contactMatrix);
    __Pyx_INCREF(__pyx_v_generator);
    __Pyx_GIVEREF(__pyx_v_generator);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_generator);
    __Pyx_INCREF(__pyx_v_intervention_fun);
    __Pyx_GIVEREF(__pyx_v_intervention_fun);
    PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_intervention_fun);
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3360:         x0 = infer_result['x0'].copy()
  __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_n_u_x0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3360, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_copy); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3360, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3360, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_x0 = __pyx_t_2;
  __pyx_t_2 = 0;
+3361:         fltr = pyross.utils.process_fltr(fltr, Nf)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyross); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3361, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_utils); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3361, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_process_fltr); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3361, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_Nf); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3361, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_fltr, __pyx_t_1};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3361, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_fltr, __pyx_t_1};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3361, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3361, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_INCREF(__pyx_v_fltr);
    __Pyx_GIVEREF(__pyx_v_fltr);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_5, __pyx_v_fltr);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_5, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3361, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF_SET(__pyx_v_fltr, __pyx_t_2);
  __pyx_t_2 = 0;
+3362:         self.set_params(infer_result['params_dict'])
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_params); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3362, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_Dict_GetItem(__pyx_v_infer_result, __pyx_n_u_params_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3362, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_1, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3362, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3363:         mean, cov, full_null_space, known_space = self._mean_cov_for_lat_traj(x0, obs[1:], fltr[1:], Tf)
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_mean_cov_for_lat_traj); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3363, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_obs, 1, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3363, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_v_fltr, 1, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3363, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[5] = {__pyx_t_4, __pyx_v_x0, __pyx_t_7, __pyx_t_1, __pyx_v_Tf};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 4+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3363, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[5] = {__pyx_t_4, __pyx_v_x0, __pyx_t_7, __pyx_t_1, __pyx_v_Tf};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 4+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3363, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(4+__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_INCREF(__pyx_v_x0);
    __Pyx_GIVEREF(__pyx_v_x0);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_5, __pyx_v_x0);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_5, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_5, __pyx_t_1);
    __Pyx_INCREF(__pyx_v_Tf);
    __Pyx_GIVEREF(__pyx_v_Tf);
    PyTuple_SET_ITEM(__pyx_t_8, 3+__pyx_t_5, __pyx_v_Tf);
    __pyx_t_7 = 0;
    __pyx_t_1 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 3363, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_7 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_6 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_7 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_7);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_6,&__pyx_t_8,&__pyx_t_1,&__pyx_t_7};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 3363, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_6,&__pyx_t_8,&__pyx_t_1,&__pyx_t_7};
    __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_9 = Py_TYPE(__pyx_t_4)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_9(__pyx_t_4); if (unlikely(!item)) goto __pyx_L3_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_4), 4) < 0) __PYX_ERR(0, 3363, __pyx_L1_error)
    __pyx_t_9 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_9 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 3363, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_mean = __pyx_t_6;
  __pyx_t_6 = 0;
  __pyx_v_cov = __pyx_t_8;
  __pyx_t_8 = 0;
  __pyx_v_full_null_space = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_known_space = __pyx_t_7;
  __pyx_t_7 = 0;
+3364:         trajs = np.full((nsamples, (Nf-1), self.dim), -1, dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_full); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t((__pyx_v_Nf - 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_INCREF(__pyx_v_nsamples);
  __Pyx_GIVEREF(__pyx_v_nsamples);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_nsamples);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);
  __Pyx_INCREF(__pyx_int_neg_1);
  __Pyx_GIVEREF(__pyx_int_neg_1);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_neg_1);
  __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 3364, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_trajs = __pyx_t_2;
  __pyx_t_2 = 0;
+3365:         if require_positive:
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_require_positive); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3365, __pyx_L1_error)
  if (__pyx_t_10) {
/* … */
    goto __pyx_L5;
  }
+3366:             for i in range(nsamples):
    __pyx_t_11 = __Pyx_PyInt_As_long(__pyx_v_nsamples); if (unlikely((__pyx_t_11 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 3366, __pyx_L1_error)
    __pyx_t_12 = __pyx_t_11;
    for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_12; __pyx_t_3+=1) {
      __pyx_v_i = __pyx_t_3;
+3367:                 while not all(map(self._all_positive, trajs[i])):
      while (1) {
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_all_positive); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3367, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_trajs, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3367, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3367, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_2);
        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_8);
        __pyx_t_2 = 0;
        __pyx_t_8 = 0;
        __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_1, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3367, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3367, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3367, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_13 = ((!__pyx_t_10) != 0);
        if (!__pyx_t_13) break;
+3368:                     partial_trajs = np.random.multivariate_normal(mean, cov)
        __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3368, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_random); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3368, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_multivariate_normal); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3368, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = NULL;
        __pyx_t_5 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8);
          if (likely(__pyx_t_2)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_2);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_8, function);
            __pyx_t_5 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_8)) {
          PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_mean, __pyx_v_cov};
          __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3368, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
          PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_mean, __pyx_v_cov};
          __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3368, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        {
          __pyx_t_7 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3368, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (__pyx_t_2) {
            __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2); __pyx_t_2 = NULL;
          }
          __Pyx_INCREF(__pyx_v_mean);
          __Pyx_GIVEREF(__pyx_v_mean);
          PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_5, __pyx_v_mean);
          __Pyx_INCREF(__pyx_v_cov);
          __Pyx_GIVEREF(__pyx_v_cov);
          PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_5, __pyx_v_cov);
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3368, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF_SET(__pyx_v_partial_trajs, __pyx_t_1);
        __pyx_t_1 = 0;
+3369:                     trajs[i] = (full_null_space.T@partial_trajs + known_space).reshape((Nf-1, self.dim))
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_full_null_space, __pyx_n_s_T); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3369, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_7 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_8, __pyx_v_partial_trajs); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3369, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_8 = PyNumber_Add(__pyx_t_7, __pyx_v_known_space); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3369, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_reshape); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3369, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_8 = PyInt_FromSsize_t((__pyx_v_Nf - 1)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3369, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3369, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3369, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_2);
        PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2);
        __pyx_t_8 = 0;
        __pyx_t_2 = 0;
        __pyx_t_2 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_2)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_2);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
          }
        }
        __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_2, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3369, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(__Pyx_SetItemInt(__pyx_v_trajs, __pyx_v_i, __pyx_t_1, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0)) __PYX_ERR(0, 3369, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
    }
 3370:         else:
+3371:             partial_trajs = np.random.default_rng().multivariate_normal(mean, cov, nsamples, method='eigh')
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_random); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_default_rng); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multivariate_normal); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_mean);
    __Pyx_GIVEREF(__pyx_v_mean);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_mean);
    __Pyx_INCREF(__pyx_v_cov);
    __Pyx_GIVEREF(__pyx_v_cov);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_cov);
    __Pyx_INCREF(__pyx_v_nsamples);
    __Pyx_GIVEREF(__pyx_v_nsamples);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_nsamples);
    __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_method, __pyx_n_u_eigh) < 0) __PYX_ERR(0, 3371, __pyx_L1_error)
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_v_partial_trajs = __pyx_t_2;
    __pyx_t_2 = 0;
+3372:             for i in range(nsamples):
    __pyx_t_11 = __Pyx_PyInt_As_long(__pyx_v_nsamples); if (unlikely((__pyx_t_11 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 3372, __pyx_L1_error)
    __pyx_t_12 = __pyx_t_11;
    for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_12; __pyx_t_3+=1) {
      __pyx_v_i = __pyx_t_3;
+3373:                 trajs[i] = (full_null_space.T@partial_trajs[i] + known_space).reshape((Nf-1, self.dim))
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_full_null_space, __pyx_n_s_T); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_partial_trajs, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyNumber_Add(__pyx_t_7, __pyx_v_known_space); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_reshape); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_Nf - 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6);
      __pyx_t_1 = 0;
      __pyx_t_6 = 0;
      __pyx_t_6 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
        if (likely(__pyx_t_6)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_7, function);
        }
      }
      __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_6, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(__Pyx_SetItemInt(__pyx_v_trajs, __pyx_v_i, __pyx_t_2, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0)) __PYX_ERR(0, 3373, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
  }
  __pyx_L5:;
+3374:         return trajs
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_trajs);
  __pyx_r = __pyx_v_trajs;
  goto __pyx_L0;
 3375: 
 3376: 
+3377:     def get_mean_inits(self, init_priors, np.ndarray obs0, np.ndarray fltr0):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_107get_mean_inits(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_106get_mean_inits[] = "Construct full initial conditions from the prior dict\n\n        Parameters\n        ----------\n        init_priors: dict\n            A dictionary for priors for initial conditions.\n            Same as the `init_priors` passed to `latent_infer`.\n            In this function, only takes the mean.\n        obs0: numpy.array\n            Observed initial conditions.\n        fltr0: numpy.array\n            Filter for the observed initial conditions.\n\n        Returns\n        -------\n        x0: numpy.array\n            Full initial conditions.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_107get_mean_inits(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_init_priors = 0;
  PyArrayObject *__pyx_v_obs0 = 0;
  PyArrayObject *__pyx_v_fltr0 = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_mean_inits (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_init_priors,&__pyx_n_s_obs0,&__pyx_n_s_fltr0,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_priors)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("get_mean_inits", 1, 3, 3, 1); __PYX_ERR(0, 3377, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("get_mean_inits", 1, 3, 3, 2); __PYX_ERR(0, 3377, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_mean_inits") < 0)) __PYX_ERR(0, 3377, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_init_priors = values[0];
    __pyx_v_obs0 = ((PyArrayObject *)values[1]);
    __pyx_v_fltr0 = ((PyArrayObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_mean_inits", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3377, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.get_mean_inits", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obs0), __pyx_ptype_5numpy_ndarray, 1, "obs0", 0))) __PYX_ERR(0, 3377, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fltr0), __pyx_ptype_5numpy_ndarray, 1, "fltr0", 0))) __PYX_ERR(0, 3377, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_106get_mean_inits(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_init_priors, __pyx_v_obs0, __pyx_v_fltr0);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_106get_mean_inits(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_init_priors, PyArrayObject *__pyx_v_obs0, PyArrayObject *__pyx_v_fltr0) {
  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
  PyObject *__pyx_v_init_mean = NULL;
  PyObject *__pyx_v_init_flags = NULL;
  PyObject *__pyx_v_init_fltrs = NULL;
  PyObject *__pyx_v_x0 = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_mean_inits", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("pyross.inference.SIR_type.get_mean_inits", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v__);
  __Pyx_XDECREF(__pyx_v_init_mean);
  __Pyx_XDECREF(__pyx_v_init_flags);
  __Pyx_XDECREF(__pyx_v_init_fltrs);
  __Pyx_XDECREF(__pyx_v_x0);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3378:         """Construct full initial conditions from the prior dict
 3379: 
 3380:         Parameters
 3381:         ----------
 3382:         init_priors: dict
 3383:             A dictionary for priors for initial conditions.
 3384:             Same as the `init_priors` passed to `latent_infer`.
 3385:             In this function, only takes the mean.
 3386:         obs0: numpy.array
 3387:             Observed initial conditions.
 3388:         fltr0: numpy.array
 3389:             Filter for the observed initial conditions.
 3390: 
 3391:         Returns
 3392:         -------
 3393:         x0: numpy.array
 3394:             Full initial conditions.
 3395:         """
+3396:         _, init_mean, _, _, _, _,init_flags, init_fltrs \
  __pyx_v__ = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_init_mean = __pyx_t_8;
  __pyx_t_8 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_3);
  __pyx_t_3 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_6);
  __pyx_t_6 = 0;
  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_9);
  __pyx_t_9 = 0;
  __pyx_v_init_flags = __pyx_t_10;
  __pyx_t_10 = 0;
  __pyx_v_init_fltrs = __pyx_t_11;
  __pyx_t_11 = 0;
+3397:             = pyross.utils.parse_init_prior_dict(init_priors, self.dim, len(obs0))
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_parse_init_prior_dict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_Length(((PyObject *)__pyx_v_obs0)); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3397, __pyx_L1_error)
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_v_init_priors, __pyx_t_3, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3397, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_v_init_priors, __pyx_t_3, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3397, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3397, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_INCREF(__pyx_v_init_priors);
    __Pyx_GIVEREF(__pyx_v_init_priors);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_v_init_priors);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_t_5);
    __pyx_t_3 = 0;
    __pyx_t_5 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3397, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 8)) {
      if (size > 8) __Pyx_RaiseTooManyValuesError(8);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 3396, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 5); 
      __pyx_t_10 = PyTuple_GET_ITEM(sequence, 6); 
      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 7); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 5); 
      __pyx_t_10 = PyList_GET_ITEM(sequence, 6); 
      __pyx_t_11 = PyList_GET_ITEM(sequence, 7); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx_t_11);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[8] = {&__pyx_t_2,&__pyx_t_8,&__pyx_t_5,&__pyx_t_3,&__pyx_t_6,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11};
      for (i=0; i < 8; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 3396, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[8] = {&__pyx_t_2,&__pyx_t_8,&__pyx_t_5,&__pyx_t_3,&__pyx_t_6,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11};
    __pyx_t_12 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3396, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_13 = Py_TYPE(__pyx_t_12)->tp_iternext;
    for (index=0; index < 8; index++) {
      PyObject* item = __pyx_t_13(__pyx_t_12); if (unlikely(!item)) goto __pyx_L3_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_12), 8) < 0) __PYX_ERR(0, 3396, __pyx_L1_error)
    __pyx_t_13 = NULL;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_13 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 3396, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
+3398:         x0 = self._construct_inits(init_mean, init_flags, init_fltrs, obs0, fltr0)
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_construct_inits); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_10 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_11)) {
    PyObject *__pyx_temp[6] = {__pyx_t_10, __pyx_v_init_mean, __pyx_v_init_flags, __pyx_v_init_fltrs, ((PyObject *)__pyx_v_obs0), ((PyObject *)__pyx_v_fltr0)};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_7, 5+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3398, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
    PyObject *__pyx_temp[6] = {__pyx_t_10, __pyx_v_init_mean, __pyx_v_init_flags, __pyx_v_init_fltrs, ((PyObject *)__pyx_v_obs0), ((PyObject *)__pyx_v_fltr0)};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_7, 5+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3398, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(5+__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3398, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_10) {
      __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_10); __pyx_t_10 = NULL;
    }
    __Pyx_INCREF(__pyx_v_init_mean);
    __Pyx_GIVEREF(__pyx_v_init_mean);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_7, __pyx_v_init_mean);
    __Pyx_INCREF(__pyx_v_init_flags);
    __Pyx_GIVEREF(__pyx_v_init_flags);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_7, __pyx_v_init_flags);
    __Pyx_INCREF(__pyx_v_init_fltrs);
    __Pyx_GIVEREF(__pyx_v_init_fltrs);
    PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_7, __pyx_v_init_fltrs);
    __Pyx_INCREF(((PyObject *)__pyx_v_obs0));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_obs0));
    PyTuple_SET_ITEM(__pyx_t_9, 3+__pyx_t_7, ((PyObject *)__pyx_v_obs0));
    __Pyx_INCREF(((PyObject *)__pyx_v_fltr0));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_fltr0));
    PyTuple_SET_ITEM(__pyx_t_9, 4+__pyx_t_7, ((PyObject *)__pyx_v_fltr0));
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3398, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_v_x0 = __pyx_t_1;
  __pyx_t_1 = 0;
+3399:         return x0
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_x0);
  __pyx_r = __pyx_v_x0;
  goto __pyx_L0;
 3400: 
+3401:     cpdef find_fastest_growing_lin_mode(self, double t):
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_109find_fastest_growing_lin_mode(PyObject *__pyx_v_self, PyObject *__pyx_arg_t); /*proto*/
static PyObject *__pyx_f_6pyross_9inference_8SIR_type_find_fastest_growing_lin_mode(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, double __pyx_v_t, int __pyx_skip_dispatch) {
  PyArrayObject *__pyx_v_x0 = 0;
  Py_ssize_t __pyx_v_S_index;
  Py_ssize_t __pyx_v_M;
  PyObject *__pyx_v_sign = NULL;
  PyObject *__pyx_v_eigvec = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_x0;
  __Pyx_Buffer __pyx_pybuffer_x0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("find_fastest_growing_lin_mode", 0);
  __pyx_pybuffer_x0.pybuffer.buf = NULL;
  __pyx_pybuffer_x0.refcount = 0;
  __pyx_pybuffernd_x0.data = NULL;
  __pyx_pybuffernd_x0.rcbuffer = &__pyx_pybuffer_x0;
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_find_fastest_growing_lin_mode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_6pyross_9inference_8SIR_type_109find_fastest_growing_lin_mode)) {
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_3 = PyFloat_FromDouble(__pyx_v_t); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3401, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; __pyx_t_5 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
          }
        }
        __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3401, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x0.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("pyross.inference.SIR_type.find_fastest_growing_lin_mode", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x0.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF((PyObject *)__pyx_v_x0);
  __Pyx_XDECREF(__pyx_v_sign);
  __Pyx_XDECREF(__pyx_v_eigvec);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_109find_fastest_growing_lin_mode(PyObject *__pyx_v_self, PyObject *__pyx_arg_t); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_109find_fastest_growing_lin_mode(PyObject *__pyx_v_self, PyObject *__pyx_arg_t) {
  double __pyx_v_t;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("find_fastest_growing_lin_mode (wrapper)", 0);
  assert(__pyx_arg_t); {
    __pyx_v_t = __pyx_PyFloat_AsDouble(__pyx_arg_t); if (unlikely((__pyx_v_t == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3401, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.find_fastest_growing_lin_mode", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_108find_fastest_growing_lin_mode(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), ((double)__pyx_v_t));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_108find_fastest_growing_lin_mode(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, double __pyx_v_t) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("find_fastest_growing_lin_mode", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6pyross_9inference_8SIR_type_find_fastest_growing_lin_mode(__pyx_v_self, __pyx_v_t, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3401, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.find_fastest_growing_lin_mode", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3402:         cdef:
 3403:             np.ndarray [DTYPE_t, ndim=1] x0
+3404:             Py_ssize_t S_index, M=self.M
  __pyx_t_6 = __pyx_v_self->M;
  __pyx_v_M = __pyx_t_6;
 3405:         # assume no infected at the start and compute eig vecs for the infectious species
+3406:         x0 = np.zeros((self.dim), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3406, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3406, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3406, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3406, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3406, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3406, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 3406, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3406, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3406, __pyx_L1_error)
  __pyx_t_7 = ((PyArrayObject *)__pyx_t_3);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x0.rcbuffer->pybuffer);
    __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x0.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_8 < 0)) {
      PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x0.rcbuffer->pybuffer, (PyObject*)__pyx_v_x0, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      }
      __pyx_t_9 = __pyx_t_10 = __pyx_t_11 = 0;
    }
    __pyx_pybuffernd_x0.diminfo[0].strides = __pyx_pybuffernd_x0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x0.diminfo[0].shape = __pyx_pybuffernd_x0.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 3406, __pyx_L1_error)
  }
  __pyx_t_7 = 0;
  __pyx_v_x0 = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
+3407:         assert 'S' in self.class_index_dict, 'for fastest growing mode, a class "S" needs to be specified'
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(__pyx_v_self->class_index_dict == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 3407, __pyx_L1_error)
    }
    __pyx_t_12 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_S, __pyx_v_self->class_index_dict, Py_EQ)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 3407, __pyx_L1_error)
    if (unlikely(!(__pyx_t_12 != 0))) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_for_fastest_growing_mode_a_class);
      __PYX_ERR(0, 3407, __pyx_L1_error)
    }
  }
  #endif
+3408:         S_index = self.class_index_dict['S']
  if (unlikely(__pyx_v_self->class_index_dict == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 3408, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_self->class_index_dict, __pyx_n_u_S); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 3408, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_S_index = __pyx_t_6;
+3409:         x0[S_index*M:(S_index+1)*M] = self.fi
  __pyx_t_3 = ((PyObject *)__pyx_v_self->fi);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_S_index * __pyx_v_M)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3409, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyInt_FromSsize_t(((__pyx_v_S_index + 1) * __pyx_v_M)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3409, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = PySlice_New(__pyx_t_1, __pyx_t_4, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3409, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_x0), __pyx_t_2, __pyx_t_3) < 0)) __PYX_ERR(0, 3409, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3410:         self.compute_jacobian_and_b_matrix(x0, t,
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_x0), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 3410, __pyx_L1_error)
/* … */
  __pyx_t_14.__pyx_n = 2;
  __pyx_t_14.b_matrix = Py_False;
  __pyx_t_14.jacobian = Py_True;
  __pyx_t_3 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->compute_jacobian_and_b_matrix(__pyx_v_self, __pyx_t_13, __pyx_v_t, &__pyx_t_14); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3410, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __pyx_t_13.memview = NULL;
  __pyx_t_13.data = NULL;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 3411:                                            b_matrix=False, jacobian=True)
+3412:         sign, eigvec = pyross.utils.largest_real_eig(self.J_mat)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3412, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3412, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_largest_real_eig); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3412, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, ((PyObject *)__pyx_v_self->J_mat)) : __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_self->J_mat));
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3412, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 3412, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3412, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3412, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3412, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_15 = Py_TYPE(__pyx_t_1)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_15(__pyx_t_1); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_4 = __pyx_t_15(__pyx_t_1); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_1), 2) < 0) __PYX_ERR(0, 3412, __pyx_L1_error)
    __pyx_t_15 = NULL;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_15 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 3412, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_sign = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_eigvec = __pyx_t_4;
  __pyx_t_4 = 0;
+3413:         if not sign: # if eigval not positive, just return the zero state
  __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_v_sign); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 3413, __pyx_L1_error)
  __pyx_t_16 = ((!__pyx_t_12) != 0);
  if (__pyx_t_16) {
/* … */
  }
+3414:             return np.zeros(self.dim)
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3414, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3414, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3414, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3414, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
 3415:         else:
+3416:             if eigvec[S_index*M] > 0:
  /*else*/ {
    __pyx_t_6 = (__pyx_v_S_index * __pyx_v_M);
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_eigvec, __pyx_t_6, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3416, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3416, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_16 < 0)) __PYX_ERR(0, 3416, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_16) {
/* … */
    }
+3417:                 eigvec = - eigvec
      __pyx_t_2 = PyNumber_Negative(__pyx_v_eigvec); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3417, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_eigvec, __pyx_t_2);
      __pyx_t_2 = 0;
+3418:             return eigvec/np.linalg.norm(eigvec, ord=1)
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3418, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_linalg); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3418, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_norm); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3418, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3418, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_eigvec);
    __Pyx_GIVEREF(__pyx_v_eigvec);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_eigvec);
    __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3418, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_ord, __pyx_int_1) < 0) __PYX_ERR(0, 3418, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3418, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_v_eigvec, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3418, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
  }
 3419: 
+3420:     def set_lyapunov_method(self, lyapunov_method, rtol=None, max_steps=0):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_111set_lyapunov_method(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_110set_lyapunov_method[] = "Sets the method used for deterministic integration for the SIR_type model\n\n        Parameters\n        ----------\n        lyapunov_method: str\n            The name of the integration method. Choose between 'LSODA', 'RK45', 'RK2', 'RK4', and 'euler'.\n        rtol: double, optional\n            relative tolerance of the integrator (default 1e-3)\n        max_steps: int\n            Maximum number of integration steps (total) for the integrator. Default: unlimited (represented as 0)\n            Parameters for which the integrator reaches max_steps are disregarded by the optimiser.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_111set_lyapunov_method(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_lyapunov_method = 0;
  PyObject *__pyx_v_rtol = 0;
  PyObject *__pyx_v_max_steps = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_lyapunov_method (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_lyapunov_method,&__pyx_n_s_rtol,&__pyx_n_s_max_steps,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lyapunov_method)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_lyapunov_method") < 0)) __PYX_ERR(0, 3420, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_lyapunov_method = values[0];
    __pyx_v_rtol = values[1];
    __pyx_v_max_steps = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_lyapunov_method", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3420, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.set_lyapunov_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_110set_lyapunov_method(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_lyapunov_method, __pyx_v_rtol, __pyx_v_max_steps);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_110set_lyapunov_method(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_lyapunov_method, PyObject *__pyx_v_rtol, PyObject *__pyx_v_max_steps) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_lyapunov_method", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pyross.inference.SIR_type.set_lyapunov_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3421:         """Sets the method used for deterministic integration for the SIR_type model
 3422: 
 3423:         Parameters
 3424:         ----------
 3425:         lyapunov_method: str
 3426:             The name of the integration method. Choose between 'LSODA', 'RK45', 'RK2', 'RK4', and 'euler'.
 3427:         rtol: double, optional
 3428:             relative tolerance of the integrator (default 1e-3)
 3429:         max_steps: int
 3430:             Maximum number of integration steps (total) for the integrator. Default: unlimited (represented as 0)
 3431:             Parameters for which the integrator reaches max_steps are disregarded by the optimiser.
 3432:         """
+3433:         if lyapunov_method not in ['LSODA', 'RK45', 'RK2', 'RK4', 'euler']:
  __Pyx_INCREF(__pyx_v_lyapunov_method);
  __pyx_t_1 = __pyx_v_lyapunov_method;
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_LSODA, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 3433, __pyx_L1_error)
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_RK45, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 3433, __pyx_L1_error)
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_RK2, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 3433, __pyx_L1_error)
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_RK4, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 3433, __pyx_L1_error)
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_euler, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 3433, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+3434:             raise Exception('{} not implemented. Choose between LSODA, RK45, RK2, RK4, and euler'.format(lyapunov_method))
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_not_implemented_Choose_between, __pyx_n_s_format); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3434, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_lyapunov_method) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_lyapunov_method);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3434, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3434, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(0, 3434, __pyx_L1_error)
+3435:         self.lyapunov_method=lyapunov_method
  if (!(likely(PyUnicode_CheckExact(__pyx_v_lyapunov_method))||((__pyx_v_lyapunov_method) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_lyapunov_method)->tp_name), 0))) __PYX_ERR(0, 3435, __pyx_L1_error)
  __pyx_t_4 = __pyx_v_lyapunov_method;
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->lyapunov_method);
  __Pyx_DECREF(__pyx_v_self->lyapunov_method);
  __pyx_v_self->lyapunov_method = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+3436:         if rtol is not None:
  __pyx_t_3 = (__pyx_v_rtol != Py_None);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
/* … */
  }
+3437:             self.rtol_lyapunov = rtol
    __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_rtol); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3437, __pyx_L1_error)
    __pyx_v_self->rtol_lyapunov = __pyx_t_6;
+3438:         if max_steps is not None:
  __pyx_t_2 = (__pyx_v_max_steps != Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+3439:             self.max_steps_lyapunov = max_steps
    __pyx_t_7 = __Pyx_PyInt_As_long(__pyx_v_max_steps); if (unlikely((__pyx_t_7 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 3439, __pyx_L1_error)
    __pyx_v_self->max_steps_lyapunov = __pyx_t_7;
 3440: 
+3441:     def set_det_method(self, det_method, rtol=None, max_steps=None):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_113set_det_method(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_112set_det_method[] = "Sets the method used for deterministic integration for the SIR_type model\n\n        Parameters\n        ----------\n        det_method: str\n            The name of the integration method. Choose between 'LSODA' and 'RK45'.\n        rtol: double, optional\n            relative tolerance of the integrator (default 1e-3)\n        max_steps: int, optional\n            Maximum number of integration steps (total) for the integrator. Default: unlimited (represented as 0)\n            Parameters for which the integrator reaches max_steps are disregarded by the optimiser.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_113set_det_method(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_det_method = 0;
  PyObject *__pyx_v_rtol = 0;
  PyObject *__pyx_v_max_steps = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_det_method (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_det_method,&__pyx_n_s_rtol,&__pyx_n_s_max_steps,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_det_method)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_det_method") < 0)) __PYX_ERR(0, 3441, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_det_method = values[0];
    __pyx_v_rtol = values[1];
    __pyx_v_max_steps = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_det_method", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3441, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.set_det_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_112set_det_method(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_det_method, __pyx_v_rtol, __pyx_v_max_steps);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_112set_det_method(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_det_method, PyObject *__pyx_v_rtol, PyObject *__pyx_v_max_steps) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_det_method", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pyross.inference.SIR_type.set_det_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3442:         """Sets the method used for deterministic integration for the SIR_type model
 3443: 
 3444:         Parameters
 3445:         ----------
 3446:         det_method: str
 3447:             The name of the integration method. Choose between 'LSODA' and 'RK45'.
 3448:         rtol: double, optional
 3449:             relative tolerance of the integrator (default 1e-3)
 3450:         max_steps: int, optional
 3451:             Maximum number of integration steps (total) for the integrator. Default: unlimited (represented as 0)
 3452:             Parameters for which the integrator reaches max_steps are disregarded by the optimiser.
 3453:         """
+3454:         if det_method not in ['LSODA', 'RK45']:
  __Pyx_INCREF(__pyx_v_det_method);
  __pyx_t_1 = __pyx_v_det_method;
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_LSODA, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 3454, __pyx_L1_error)
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_RK45, Py_NE)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 3454, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+3455:             raise Exception('{} not implemented. Choose between LSODA and RK45'.format(det_method))
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_not_implemented_Choose_between_2, __pyx_n_s_format); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3455, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_det_method) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_det_method);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3455, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3455, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(0, 3455, __pyx_L1_error)
+3456:         self.det_method=det_method
  if (!(likely(PyUnicode_CheckExact(__pyx_v_det_method))||((__pyx_v_det_method) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_det_method)->tp_name), 0))) __PYX_ERR(0, 3456, __pyx_L1_error)
  __pyx_t_4 = __pyx_v_det_method;
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->det_method);
  __Pyx_DECREF(__pyx_v_self->det_method);
  __pyx_v_self->det_method = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+3457:         if rtol is not None:
  __pyx_t_3 = (__pyx_v_rtol != Py_None);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
/* … */
  }
+3458:             self.rtol_det = rtol
    __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_rtol); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3458, __pyx_L1_error)
    __pyx_v_self->rtol_det = __pyx_t_6;
+3459:         if max_steps is not None:
  __pyx_t_2 = (__pyx_v_max_steps != Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
  }
+3460:             self.max_steps_det = max_steps
    __pyx_t_7 = __Pyx_PyInt_As_long(__pyx_v_max_steps); if (unlikely((__pyx_t_7 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 3460, __pyx_L1_error)
    __pyx_v_self->max_steps_det = __pyx_t_7;
 3461: 
 3462: 
+3463:     def set_det_model(self, parameters):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_115set_det_model(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_114set_det_model[] = "\n        Sets the internal deterministic model with given epidemiological parameters\n\n        Parameters\n        ----------\n        parameters: dict\n            A dictionary of parameter values, same as the ones required for initialisation.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_115set_det_model(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_det_model (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_114set_det_model(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), ((PyObject *)__pyx_v_parameters));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_114set_det_model(CYTHON_UNUSED struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_det_model", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.set_det_model", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3464:         """
 3465:         Sets the internal deterministic model with given epidemiological parameters
 3466: 
 3467:         Parameters
 3468:         ----------
 3469:         parameters: dict
 3470:             A dictionary of parameter values, same as the ones required for initialisation.
 3471:         """
+3472:         raise NotImplementedError("Please Implement set_det_model in subclass")
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_NotImplementedError, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __PYX_ERR(0, 3472, __pyx_L1_error)
/* … */
  __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_u_Please_Implement_set_det_model_i); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 3472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__31);
  __Pyx_GIVEREF(__pyx_tuple__31);
 3473: 
+3474:     def set_contact_matrix(self, contactMatrix):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_117set_contact_matrix(PyObject *__pyx_v_self, PyObject *__pyx_v_contactMatrix); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_116set_contact_matrix[] = "\n        Sets the internal contact matrix\n\n        Parameters\n        ----------\n        contactMatrix: callable\n            A function that returns the contact matrix given time, with call\n            signature contactMatrix(t).\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_117set_contact_matrix(PyObject *__pyx_v_self, PyObject *__pyx_v_contactMatrix) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_contact_matrix (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_116set_contact_matrix(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), ((PyObject *)__pyx_v_contactMatrix));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_116set_contact_matrix(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_contactMatrix) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_contact_matrix", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3475:         """
 3476:         Sets the internal contact matrix
 3477: 
 3478:         Parameters
 3479:         ----------
 3480:         contactMatrix: callable
 3481:             A function that returns the contact matrix given time, with call
 3482:             signature contactMatrix(t).
 3483:         """
+3484:         self.contactMatrix = contactMatrix
  __Pyx_INCREF(__pyx_v_contactMatrix);
  __Pyx_GIVEREF(__pyx_v_contactMatrix);
  __Pyx_GOTREF(__pyx_v_self->contactMatrix);
  __Pyx_DECREF(__pyx_v_self->contactMatrix);
  __pyx_v_self->contactMatrix = __pyx_v_contactMatrix;
 3485: 
+3486:     def make_params_dict(self):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_119make_params_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_119make_params_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_params_dict (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_118make_params_dict(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_118make_params_dict(CYTHON_UNUSED struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_params_dict", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.make_params_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3487:         raise NotImplementedError("Please Implement make_params_dict in subclass")
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_NotImplementedError, __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __PYX_ERR(0, 3487, __pyx_L1_error)
/* … */
  __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_u_Please_Implement_make_params_dic); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 3487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__32);
  __Pyx_GIVEREF(__pyx_tuple__32);
 3488: 
+3489:     def fill_params_dict(self, keys, params, return_additional_params=False):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_121fill_params_dict(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_120fill_params_dict[] = "Returns a full dictionary for epidemiological parameters with some changed values\n\n        Parameters\n        ----------\n        keys: list of String\n            A list of names of parameters to be changed.\n        params: numpy.array of list\n            An array of the same size as keys for the updated value.\n        return_additional_params: boolean, optional (default = False)\n            Handling of parameters that are not model parameters (e.g. control parameters). False: raise exception, True: return second dictionary with other parameters\n\n        Returns\n        -------\n        full_parameters: dict\n            A dictionary of epidemiological parameters.\n            For parameter names specified in `keys`, set the values to be the ones in `params`;\n            for the others, use the values stored in the class.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_121fill_params_dict(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_keys = 0;
  PyObject *__pyx_v_params = 0;
  PyObject *__pyx_v_return_additional_params = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fill_params_dict (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_keys,&__pyx_n_s_params,&__pyx_n_s_return_additional_params,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keys)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_params)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fill_params_dict", 0, 2, 3, 1); __PYX_ERR(0, 3489, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_return_additional_params);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fill_params_dict") < 0)) __PYX_ERR(0, 3489, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_keys = values[0];
    __pyx_v_params = values[1];
    __pyx_v_return_additional_params = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fill_params_dict", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3489, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.fill_params_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_120fill_params_dict(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_keys, __pyx_v_params, __pyx_v_return_additional_params);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_120fill_params_dict(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_keys, PyObject *__pyx_v_params, PyObject *__pyx_v_return_additional_params) {
  PyObject *__pyx_v_full_parameters = NULL;
  PyObject *__pyx_v_others = NULL;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_k = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fill_params_dict", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pyross.inference.SIR_type.fill_params_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_full_parameters);
  __Pyx_XDECREF(__pyx_v_others);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3490:         """Returns a full dictionary for epidemiological parameters with some changed values
 3491: 
 3492:         Parameters
 3493:         ----------
 3494:         keys: list of String
 3495:             A list of names of parameters to be changed.
 3496:         params: numpy.array of list
 3497:             An array of the same size as keys for the updated value.
 3498:         return_additional_params: boolean, optional (default = False)
 3499:             Handling of parameters that are not model parameters (e.g. control parameters). False: raise exception, True: return second dictionary with other parameters
 3500: 
 3501:         Returns
 3502:         -------
 3503:         full_parameters: dict
 3504:             A dictionary of epidemiological parameters.
 3505:             For parameter names specified in `keys`, set the values to be the ones in `params`;
 3506:             for the others, use the values stored in the class.
 3507:         """
+3508:         full_parameters = self.make_params_dict()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_make_params_dict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_full_parameters = __pyx_t_1;
  __pyx_t_1 = 0;
+3509:         others = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_others = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3510:         for (i, k) in enumerate(keys):
  __Pyx_INCREF(__pyx_int_0);
  __pyx_t_1 = __pyx_int_0;
  if (likely(PyList_CheckExact(__pyx_v_keys)) || PyTuple_CheckExact(__pyx_v_keys)) {
    __pyx_t_2 = __pyx_v_keys; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3510, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3510, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_5)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 3510, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3510, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 3510, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3510, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_5(__pyx_t_2);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 3510, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_1);
    __pyx_t_3 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3510, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3511:             if k in self.param_keys:
    __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_v_k, __pyx_v_self->param_keys, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 3511, __pyx_L1_error)
    __pyx_t_7 = (__pyx_t_6 != 0);
    if (__pyx_t_7) {
/* … */
      goto __pyx_L5;
    }
+3512:                 full_parameters[k] = params[i]
      __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_params, __pyx_v_i); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3512, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (unlikely(PyObject_SetItem(__pyx_v_full_parameters, __pyx_v_k, __pyx_t_3) < 0)) __PYX_ERR(0, 3512, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3513:             elif return_additional_params:
    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_return_additional_params); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 3513, __pyx_L1_error)
    if (likely(__pyx_t_7)) {
/* … */
      goto __pyx_L5;
    }
+3514:                 others[k] = params[i]
      __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_params, __pyx_v_i); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3514, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (unlikely(PyDict_SetItem(__pyx_v_others, __pyx_v_k, __pyx_t_3) < 0)) __PYX_ERR(0, 3514, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 3515:             else:
+3516:                 raise Exception('{} is not a parameter of the model'.format(k))
    /*else*/ {
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_is_not_a_parameter_of_the_model, __pyx_n_s_format); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3516, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_9)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
        }
      }
      __pyx_t_3 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_v_k) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_k);
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3516, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyObject_CallOneArg(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3516, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(0, 3516, __pyx_L1_error)
    }
    __pyx_L5:;
+3517:         if return_additional_params:
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_return_additional_params); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 3517, __pyx_L1_error)
  if (__pyx_t_7) {
/* … */
  }
+3518:             return full_parameters, others
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3518, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_full_parameters);
    __Pyx_GIVEREF(__pyx_v_full_parameters);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_full_parameters);
    __Pyx_INCREF(__pyx_v_others);
    __Pyx_GIVEREF(__pyx_v_others);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_others);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
 3519:         else:
+3520:             return full_parameters
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_full_parameters);
    __pyx_r = __pyx_v_full_parameters;
    goto __pyx_L0;
  }
 3521: 
+3522:     def set_params(self, parameters):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_123set_params(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_122set_params[] = "Sets epidemiological parameters used for evaluating -log(p)\n\n        Parameters\n        ----------\n        parameters: dict\n            A dictionary containing all epidemiological parameters.\n            Same keys as the one used to initialise the class.\n\n        Notes\n        -----\n        Can use `fill_params_dict` to generate the full dictionary if only a few parameters are changed\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_123set_params(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_params (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_122set_params(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), ((PyObject *)__pyx_v_parameters));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_122set_params(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_params", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyross.inference.SIR_type.set_params", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3523:         """Sets epidemiological parameters used for evaluating -log(p)
 3524: 
 3525:         Parameters
 3526:         ----------
 3527:         parameters: dict
 3528:             A dictionary containing all epidemiological parameters.
 3529:             Same keys as the one used to initialise the class.
 3530: 
 3531:         Notes
 3532:         -----
 3533:         Can use `fill_params_dict` to generate the full dictionary if only a few parameters are changed
 3534:         """
+3535:         self.set_det_model(parameters)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_det_model); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3535, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_parameters);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3535, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3536:         self.beta = pyross.utils.age_dep_rates(parameters['beta'], self.M, 'beta')
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3536, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3536, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_age_dep_rates); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3536, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_v_parameters, __pyx_n_u_beta); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3536, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3536, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_3, __pyx_t_4, __pyx_n_u_beta};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3536, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_3, __pyx_t_4, __pyx_n_u_beta};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3536, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3536, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_4);
    __Pyx_INCREF(__pyx_n_u_beta);
    __Pyx_GIVEREF(__pyx_n_u_beta);
    PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_n_u_beta);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3536, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3536, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->beta);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->beta));
  __pyx_v_self->beta = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+3537:         self.gIa = pyross.utils.age_dep_rates(parameters['gIa'], self.M, 'gIa')
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_age_dep_rates); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyObject_Dict_GetItem(__pyx_v_parameters, __pyx_n_u_gIa); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_t_7, __pyx_t_4, __pyx_n_u_gIa};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3537, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_t_7, __pyx_t_4, __pyx_n_u_gIa};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3537, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3537, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_6, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_t_4);
    __Pyx_INCREF(__pyx_n_u_gIa);
    __Pyx_GIVEREF(__pyx_n_u_gIa);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_6, __pyx_n_u_gIa);
    __pyx_t_7 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3537, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3537, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->gIa);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->gIa));
  __pyx_v_self->gIa = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+3538:         self.gIs = pyross.utils.age_dep_rates(parameters['gIs'], self.M, 'gIs')
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_age_dep_rates); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_v_parameters, __pyx_n_u_gIs); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_7, __pyx_t_5, __pyx_t_4, __pyx_n_u_gIs};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3538, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_7, __pyx_t_5, __pyx_t_4, __pyx_n_u_gIs};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3538, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_3 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3538, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__pyx_t_7) {
      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_7); __pyx_t_7 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_6, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_6, __pyx_t_4);
    __Pyx_INCREF(__pyx_n_u_gIs);
    __Pyx_GIVEREF(__pyx_n_u_gIs);
    PyTuple_SET_ITEM(__pyx_t_3, 2+__pyx_t_6, __pyx_n_u_gIs);
    __pyx_t_5 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3538, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3538, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->gIs);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->gIs));
  __pyx_v_self->gIs = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+3539:         self.fsa = pyross.utils.age_dep_rates(parameters['fsa'], self.M, 'fsa')
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_age_dep_rates); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_v_parameters, __pyx_n_u_fsa); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_3, __pyx_t_4, __pyx_n_u_fsa};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3539, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_3, __pyx_t_4, __pyx_n_u_fsa};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3539, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3539, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_4);
    __Pyx_INCREF(__pyx_n_u_fsa);
    __Pyx_GIVEREF(__pyx_n_u_fsa);
    PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_n_u_fsa);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3539, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3539, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->fsa);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->fsa));
  __pyx_v_self->fsa = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+3540:         self.alpha = pyross.utils.age_dep_rates(parameters['alpha'], self.M, 'alpha')
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_age_dep_rates); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyObject_Dict_GetItem(__pyx_v_parameters, __pyx_n_u_alpha); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_t_7, __pyx_t_4, __pyx_n_u_alpha};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3540, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_t_7, __pyx_t_4, __pyx_n_u_alpha};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3540, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3540, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_6, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_t_4);
    __Pyx_INCREF(__pyx_n_u_alpha);
    __Pyx_GIVEREF(__pyx_n_u_alpha);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_6, __pyx_n_u_alpha);
    __pyx_t_7 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3540, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3540, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->alpha);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->alpha));
  __pyx_v_self->alpha = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
 3541: 
+3542:     def _construct_inits(self, init_guess, flags, fltrs, obs0, fltr0):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_125_construct_inits(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_125_construct_inits(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_init_guess = 0;
  PyObject *__pyx_v_flags = 0;
  PyObject *__pyx_v_fltrs = 0;
  PyObject *__pyx_v_obs0 = 0;
  PyObject *__pyx_v_fltr0 = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_construct_inits (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_init_guess,&__pyx_n_s_flags,&__pyx_n_s_fltrs,&__pyx_n_s_obs0,&__pyx_n_s_fltr0,0};
    PyObject* values[5] = {0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_init_guess)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flags)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_construct_inits", 1, 5, 5, 1); __PYX_ERR(0, 3542, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltrs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_construct_inits", 1, 5, 5, 2); __PYX_ERR(0, 3542, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_construct_inits", 1, 5, 5, 3); __PYX_ERR(0, 3542, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_construct_inits", 1, 5, 5, 4); __PYX_ERR(0, 3542, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_construct_inits") < 0)) __PYX_ERR(0, 3542, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
    }
    __pyx_v_init_guess = values[0];
    __pyx_v_flags = values[1];
    __pyx_v_fltrs = values[2];
    __pyx_v_obs0 = values[3];
    __pyx_v_fltr0 = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_construct_inits", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3542, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type._construct_inits", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_124_construct_inits(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_init_guess, __pyx_v_flags, __pyx_v_fltrs, __pyx_v_obs0, __pyx_v_fltr0);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_124_construct_inits(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_init_guess, PyObject *__pyx_v_flags, PyObject *__pyx_v_fltrs, PyObject *__pyx_v_obs0, PyObject *__pyx_v_fltr0) {
  PyArrayObject *__pyx_v_x0 = 0;
  PyArrayObject *__pyx_v_F = 0;
  Py_ssize_t __pyx_v_start;
  PyObject *__pyx_v_coeff = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_F;
  __Pyx_Buffer __pyx_pybuffer_F;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_x0;
  __Pyx_Buffer __pyx_pybuffer_x0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_construct_inits", 0);
  __pyx_pybuffer_x0.pybuffer.buf = NULL;
  __pyx_pybuffer_x0.refcount = 0;
  __pyx_pybuffernd_x0.data = NULL;
  __pyx_pybuffernd_x0.rcbuffer = &__pyx_pybuffer_x0;
  __pyx_pybuffer_F.pybuffer.buf = NULL;
  __pyx_pybuffer_F.refcount = 0;
  __pyx_pybuffernd_F.data = NULL;
  __pyx_pybuffernd_F.rcbuffer = &__pyx_pybuffer_F;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_F.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x0.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("pyross.inference.SIR_type._construct_inits", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_F.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x0.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF((PyObject *)__pyx_v_x0);
  __Pyx_XDECREF((PyObject *)__pyx_v_F);
  __Pyx_XDECREF(__pyx_v_coeff);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3543:         cdef:
 3544:             np.ndarray [DTYPE_t, ndim=1] x0
 3545:             np.ndarray [DTYPE_t, ndim=2] F
+3546:             Py_ssize_t start=0
  __pyx_v_start = 0;
+3547:         x0 = obs0
  if (!(likely(((__pyx_v_obs0) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_obs0, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3547, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_obs0;
  __Pyx_INCREF(__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x0.rcbuffer->pybuffer);
    __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x0.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_2 < 0)) {
      PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x0.rcbuffer->pybuffer, (PyObject*)__pyx_v_x0, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5);
      }
      __pyx_t_3 = __pyx_t_4 = __pyx_t_5 = 0;
    }
    __pyx_pybuffernd_x0.diminfo[0].strides = __pyx_pybuffernd_x0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x0.diminfo[0].shape = __pyx_pybuffernd_x0.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3547, __pyx_L1_error)
  }
  __pyx_v_x0 = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+3548:         F = fltr0
  if (!(likely(((__pyx_v_fltr0) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_fltr0, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3548, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_fltr0;
  __Pyx_INCREF(__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_F.rcbuffer->pybuffer);
    __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_F.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_2 < 0)) {
      PyErr_Fetch(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_F.rcbuffer->pybuffer, (PyObject*)__pyx_v_F, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_3);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_5, __pyx_t_4, __pyx_t_3);
      }
      __pyx_t_5 = __pyx_t_4 = __pyx_t_3 = 0;
    }
    __pyx_pybuffernd_F.diminfo[0].strides = __pyx_pybuffernd_F.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_F.diminfo[0].shape = __pyx_pybuffernd_F.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_F.diminfo[1].strides = __pyx_pybuffernd_F.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_F.diminfo[1].shape = __pyx_pybuffernd_F.rcbuffer->pybuffer.shape[1];
    if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3548, __pyx_L1_error)
  }
  __pyx_v_F = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+3549:         if flags[0]: # lin mode
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_flags, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3549, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 3549, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_6) {
/* … */
  }
+3550:             coeff = init_guess[0]
    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_init_guess, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3550, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_coeff = __pyx_t_1;
    __pyx_t_1 = 0;
+3551:             x0 = np.concatenate((x0, fltrs[0]@self._lin_mode_inits(coeff)))
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3551, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3551, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_fltrs, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3551, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_lin_mode_inits); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3551, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_9 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_11, __pyx_v_coeff) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_coeff);
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3551, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3551, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3551, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_INCREF(((PyObject *)__pyx_v_x0));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_x0));
    PyTuple_SET_ITEM(__pyx_t_9, 0, ((PyObject *)__pyx_v_x0));
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_10);
    __pyx_t_10 = 0;
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_1 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_10, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_9);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3551, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3551, __pyx_L1_error)
    __pyx_t_12 = ((PyArrayObject *)__pyx_t_1);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x0.rcbuffer->pybuffer);
      __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x0.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_2 < 0)) {
        PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x0.rcbuffer->pybuffer, (PyObject*)__pyx_v_x0, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5);
        }
        __pyx_t_3 = __pyx_t_4 = __pyx_t_5 = 0;
      }
      __pyx_pybuffernd_x0.diminfo[0].strides = __pyx_pybuffernd_x0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x0.diminfo[0].shape = __pyx_pybuffernd_x0.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3551, __pyx_L1_error)
    }
    __pyx_t_12 = 0;
    __Pyx_DECREF_SET(__pyx_v_x0, ((PyArrayObject *)__pyx_t_1));
    __pyx_t_1 = 0;
+3552:             F = np.concatenate((F, fltrs[0]), axis=0)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3552, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3552, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_fltrs, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3552, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3552, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_INCREF(((PyObject *)__pyx_v_F));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_F));
    PyTuple_SET_ITEM(__pyx_t_9, 0, ((PyObject *)__pyx_v_F));
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3552, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_9);
    __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3552, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 3552, __pyx_L1_error)
    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3552, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3552, __pyx_L1_error)
    __pyx_t_13 = ((PyArrayObject *)__pyx_t_10);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_F.rcbuffer->pybuffer);
      __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_F.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_2 < 0)) {
        PyErr_Fetch(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_F.rcbuffer->pybuffer, (PyObject*)__pyx_v_F, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_3);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_5, __pyx_t_4, __pyx_t_3);
        }
        __pyx_t_5 = __pyx_t_4 = __pyx_t_3 = 0;
      }
      __pyx_pybuffernd_F.diminfo[0].strides = __pyx_pybuffernd_F.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_F.diminfo[0].shape = __pyx_pybuffernd_F.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_F.diminfo[1].strides = __pyx_pybuffernd_F.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_F.diminfo[1].shape = __pyx_pybuffernd_F.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3552, __pyx_L1_error)
    }
    __pyx_t_13 = 0;
    __Pyx_DECREF_SET(__pyx_v_F, ((PyArrayObject *)__pyx_t_10));
    __pyx_t_10 = 0;
+3553:             start += 1
    __pyx_v_start = (__pyx_v_start + 1);
+3554:         if flags[1]: # independent guesses
  __pyx_t_10 = __Pyx_GetItemInt(__pyx_v_flags, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3554, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 3554, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (__pyx_t_6) {
/* … */
  }
+3555:             x0 = np.concatenate((x0, init_guess[start:]))
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3555, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3555, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyObject_GetSlice(__pyx_v_init_guess, __pyx_v_start, 0, NULL, NULL, NULL, 1, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3555, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3555, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_INCREF(((PyObject *)__pyx_v_x0));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_x0));
    PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_v_x0));
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_9);
    __pyx_t_9 = 0;
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_10 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_9, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_8);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3555, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3555, __pyx_L1_error)
    __pyx_t_12 = ((PyArrayObject *)__pyx_t_10);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x0.rcbuffer->pybuffer);
      __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x0.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_2 < 0)) {
        PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x0.rcbuffer->pybuffer, (PyObject*)__pyx_v_x0, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5);
        }
        __pyx_t_3 = __pyx_t_4 = __pyx_t_5 = 0;
      }
      __pyx_pybuffernd_x0.diminfo[0].strides = __pyx_pybuffernd_x0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x0.diminfo[0].shape = __pyx_pybuffernd_x0.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3555, __pyx_L1_error)
    }
    __pyx_t_12 = 0;
    __Pyx_DECREF_SET(__pyx_v_x0, ((PyArrayObject *)__pyx_t_10));
    __pyx_t_10 = 0;
+3556:             F = np.concatenate((F, fltrs[1]), axis=0)
    __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3556, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3556, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = __Pyx_GetItemInt(__pyx_v_fltrs, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3556, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3556, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_INCREF(((PyObject *)__pyx_v_F));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_F));
    PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_v_F));
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_10);
    __pyx_t_10 = 0;
    __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3556, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8);
    __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3556, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 3556, __pyx_L1_error)
    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_10, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3556, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3556, __pyx_L1_error)
    __pyx_t_13 = ((PyArrayObject *)__pyx_t_9);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_F.rcbuffer->pybuffer);
      __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_F.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_2 < 0)) {
        PyErr_Fetch(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_F.rcbuffer->pybuffer, (PyObject*)__pyx_v_F, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_3);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_5, __pyx_t_4, __pyx_t_3);
        }
        __pyx_t_5 = __pyx_t_4 = __pyx_t_3 = 0;
      }
      __pyx_pybuffernd_F.diminfo[0].strides = __pyx_pybuffernd_F.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_F.diminfo[0].shape = __pyx_pybuffernd_F.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_F.diminfo[1].strides = __pyx_pybuffernd_F.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_F.diminfo[1].shape = __pyx_pybuffernd_F.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3556, __pyx_L1_error)
    }
    __pyx_t_13 = 0;
    __Pyx_DECREF_SET(__pyx_v_F, ((PyArrayObject *)__pyx_t_9));
    __pyx_t_9 = 0;
+3557:         assert np.linalg.matrix_rank(F) == self.dim, 'Conflicts in initial conditions'
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_linalg); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_matrix_rank); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_9 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_10, ((PyObject *)__pyx_v_F)) : __Pyx_PyObject_CallOneArg(__pyx_t_8, ((PyObject *)__pyx_v_F));
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_10 = PyObject_RichCompare(__pyx_t_9, __pyx_t_8, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3557, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 3557, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_6)) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Conflicts_in_initial_conditions);
      __PYX_ERR(0, 3557, __pyx_L1_error)
    }
  }
  #endif
+3558:         return np.linalg.solve(F, x0)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_linalg); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_solve); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = NULL;
  __pyx_t_2 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
      __pyx_t_2 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[3] = {__pyx_t_9, ((PyObject *)__pyx_v_F), ((PyObject *)__pyx_v_x0)};
    __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_2, 2+__pyx_t_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3558, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_10);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[3] = {__pyx_t_9, ((PyObject *)__pyx_v_F), ((PyObject *)__pyx_v_x0)};
    __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_2, 2+__pyx_t_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3558, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_10);
  } else
  #endif
  {
    __pyx_t_1 = PyTuple_New(2+__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3558, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (__pyx_t_9) {
      __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_9); __pyx_t_9 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_v_F));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_F));
    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_2, ((PyObject *)__pyx_v_F));
    __Pyx_INCREF(((PyObject *)__pyx_v_x0));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_x0));
    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_2, ((PyObject *)__pyx_v_x0));
    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3558, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_r = __pyx_t_10;
  __pyx_t_10 = 0;
  goto __pyx_L0;
 3559: 
+3560:     def _lin_mode_inits(self, double coeff):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_127_lin_mode_inits(PyObject *__pyx_v_self, PyObject *__pyx_arg_coeff); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_127_lin_mode_inits(PyObject *__pyx_v_self, PyObject *__pyx_arg_coeff) {
  double __pyx_v_coeff;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_lin_mode_inits (wrapper)", 0);
  assert(__pyx_arg_coeff); {
    __pyx_v_coeff = __pyx_PyFloat_AsDouble(__pyx_arg_coeff); if (unlikely((__pyx_v_coeff == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3560, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type._lin_mode_inits", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_126_lin_mode_inits(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), ((double)__pyx_v_coeff));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_126_lin_mode_inits(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, double __pyx_v_coeff) {
  __Pyx_memviewslice __pyx_v_v = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_x0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fi = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_lin_mode_inits", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pyross.inference.SIR_type._lin_mode_inits", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_v, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_x0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fi, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3561:         cdef double [:] v, x0, fi=self.fi
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->fi), PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 3561, __pyx_L1_error)
  __pyx_v_fi = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+3562:         v = self.find_fastest_growing_lin_mode(0)
  __pyx_t_2 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->find_fastest_growing_lin_mode(__pyx_v_self, 0.0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3562, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 3562, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_v = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+3563:         v = np.multiply(v, coeff)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_multiply); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_v, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_coeff); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_5};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3563, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_5};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3563, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3563, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_5);
    __pyx_t_3 = 0;
    __pyx_t_5 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3563, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 3563, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __PYX_XDEC_MEMVIEW(&__pyx_v_v, 1);
  __pyx_v_v = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+3564:         x0 = np.zeros((self.dim), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 3564, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 3564, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_x0 = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+3565:         x0[:self.M] = fi
  __pyx_t_1.data = __pyx_v_x0.data;
  __pyx_t_1.memview = __pyx_v_x0.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_1, 0);
  __pyx_t_7 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_1,
    __pyx_v_x0.shape[0], __pyx_v_x0.strides[0], __pyx_v_x0.suboffsets[0],
    0,
    0,
    &__pyx_t_7,
    0,
    __pyx_v_self->M,
    0,
    0,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 3565, __pyx_L1_error)
}

if (unlikely(__pyx_memoryview_copy_contents(__pyx_v_fi, __pyx_t_1, 1, 1, 0) < 0)) __PYX_ERR(0, 3565, __pyx_L1_error)
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+3566:         return np.add(x0, v)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3566, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_add); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3566, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_x0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3566, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_v, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3566, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_2, __pyx_t_4};
    __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3566, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_2, __pyx_t_4};
    __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3566, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3566, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_7, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_7, __pyx_t_4);
    __pyx_t_2 = 0;
    __pyx_t_4 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3566, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
 3567: 
+3568:     cdef double _obtain_logp_for_traj(self, double [:, :] x, double Tf,
static double __pyx_f_6pyross_9inference_8SIR_type__obtain_logp_for_traj(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, __Pyx_memviewslice __pyx_v_x, double __pyx_v_Tf, struct __pyx_opt_args_6pyross_9inference_8SIR_type__obtain_logp_for_traj *__pyx_optional_args) {
  Py_ssize_t __pyx_v_inter_steps = ((Py_ssize_t)0);
  double __pyx_v_log_p;
  __Pyx_memviewslice __pyx_v_xi = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_xf = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dev = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_cov = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_xm = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v__xm = { 0, 0, { 0 }, { 0 }, { 0 } };
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_Nf;
  Py_ssize_t __pyx_v_steps;
  __Pyx_memviewslice __pyx_v_time_points = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_ti = NULL;
  PyObject *__pyx_v_tf = NULL;
  PyObject *__pyx_v_times = NULL;
  PyObject *__pyx_v_sol = NULL;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_obtain_logp_for_traj", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_inter_steps = __pyx_optional_args->inter_steps;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
  __Pyx_WriteUnraisable("pyross.inference.SIR_type._obtain_logp_for_traj", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_xi, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_xf, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dev, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_cov, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_xm, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v__xm, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_time_points, 1);
  __Pyx_XDECREF(__pyx_v_ti);
  __Pyx_XDECREF(__pyx_v_tf);
  __Pyx_XDECREF(__pyx_v_times);
  __Pyx_XDECREF(__pyx_v_sol);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_6pyross_9inference_8SIR_type__obtain_logp_for_traj {
  int __pyx_n;
  Py_ssize_t inter_steps;
};
 3569:                                      Py_ssize_t inter_steps=0):
 3570:         cdef:
+3571:             double log_p = 0
  __pyx_v_log_p = 0.0;
 3572:             double [:] xi, xf, dev
 3573:             double [:, :] cov, xm, _xm
+3574:             Py_ssize_t i, Nf=x.shape[0], steps=self.steps
  __pyx_v_Nf = (__pyx_v_x.shape[0]);
  __pyx_t_1 = __pyx_v_self->steps;
  __pyx_v_steps = __pyx_t_1;
+3575:             double [:] time_points = np.linspace(0, Tf, Nf)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_linspace); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Tf); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_Nf); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_int_0, __pyx_t_3, __pyx_t_5};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3575, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_int_0, __pyx_t_3, __pyx_t_5};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3575, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3575, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_GIVEREF(__pyx_int_0);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_int_0);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_t_5);
    __pyx_t_3 = 0;
    __pyx_t_5 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3575, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 3575, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_time_points = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
+3576:         for i in range(Nf-1):
  __pyx_t_1 = (__pyx_v_Nf - 1);
  __pyx_t_10 = __pyx_t_1;
  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
    __pyx_v_i = __pyx_t_11;
+3577:             xi = x[i]
    __pyx_t_9.data = __pyx_v_x.data;
    __pyx_t_9.memview = __pyx_v_x.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_9, 0);
    {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_x.strides[0];
        __pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_9.shape[0] = __pyx_v_x.shape[1];
__pyx_t_9.strides[0] = __pyx_v_x.strides[1];
    __pyx_t_9.suboffsets[0] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_v_xi, 1);
    __pyx_v_xi = __pyx_t_9;
    __pyx_t_9.memview = NULL;
    __pyx_t_9.data = NULL;
+3578:             xf = x[i+1]
    __pyx_t_9.data = __pyx_v_x.data;
    __pyx_t_9.memview = __pyx_v_x.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_9, 0);
    {
    Py_ssize_t __pyx_tmp_idx = (__pyx_v_i + 1);
    Py_ssize_t __pyx_tmp_stride = __pyx_v_x.strides[0];
        __pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_9.shape[0] = __pyx_v_x.shape[1];
__pyx_t_9.strides[0] = __pyx_v_x.strides[1];
    __pyx_t_9.suboffsets[0] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_v_xf, 1);
    __pyx_v_xf = __pyx_t_9;
    __pyx_t_9.memview = NULL;
    __pyx_t_9.data = NULL;
+3579:             ti = time_points[i]
    __pyx_t_12 = __pyx_v_i;
    __pyx_t_2 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_time_points.data + __pyx_t_12 * __pyx_v_time_points.strides[0]) )))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3579, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v_ti, __pyx_t_2);
    __pyx_t_2 = 0;
+3580:             tf = time_points[i+1]
    __pyx_t_12 = (__pyx_v_i + 1);
    __pyx_t_2 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_time_points.data + __pyx_t_12 * __pyx_v_time_points.strides[0]) )))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3580, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v_tf, __pyx_t_2);
    __pyx_t_2 = 0;
+3581:             if inter_steps:
    __pyx_t_13 = (__pyx_v_inter_steps != 0);
    if (__pyx_t_13) {
/* … */
      goto __pyx_L5;
    }
+3582:                 xi = np.multiply(xi, self.Omega)
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3582, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_multiply); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3582, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_xi, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3582, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = PyFloat_FromDouble(__pyx_v_self->Omega); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3582, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = NULL;
      __pyx_t_7 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
          __pyx_t_7 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_8)) {
        PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_4, __pyx_t_5};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3582, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
        PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_4, __pyx_t_5};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3582, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      } else
      #endif
      {
        __pyx_t_6 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3582, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (__pyx_t_3) {
          __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_7, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_7, __pyx_t_5);
        __pyx_t_4 = 0;
        __pyx_t_5 = 0;
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3582, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 3582, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_XDEC_MEMVIEW(&__pyx_v_xi, 1);
      __pyx_v_xi = __pyx_t_9;
      __pyx_t_9.memview = NULL;
      __pyx_t_9.data = NULL;
+3583:                 _xm = pyross.utils.forward_euler_integration(self._rhs0, xi,
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_pyross); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3583, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_utils); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3583, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_forward_euler_integration); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3583, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_rhs0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3583, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_xi, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3583, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
/* … */
      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 3583, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_XDEC_MEMVIEW(&__pyx_v__xm, 1);
      __pyx_v__xm = __pyx_t_16;
      __pyx_t_16.memview = NULL;
      __pyx_t_16.data = NULL;
 3584:                                                              ti, tf,
+3585:                                                              steps, inter_steps)
      __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_steps); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3585, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_inter_steps); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3585, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_14 = NULL;
      __pyx_t_7 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_14)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_14);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
          __pyx_t_7 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_8)) {
        PyObject *__pyx_temp[7] = {__pyx_t_14, __pyx_t_6, __pyx_t_5, __pyx_v_ti, __pyx_v_tf, __pyx_t_4, __pyx_t_3};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_7, 6+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3583, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
        PyObject *__pyx_temp[7] = {__pyx_t_14, __pyx_t_6, __pyx_t_5, __pyx_v_ti, __pyx_v_tf, __pyx_t_4, __pyx_t_3};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_7, 6+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3583, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      } else
      #endif
      {
        __pyx_t_15 = PyTuple_New(6+__pyx_t_7); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3583, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        if (__pyx_t_14) {
          __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_14); __pyx_t_14 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_7, __pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_7, __pyx_t_5);
        __Pyx_INCREF(__pyx_v_ti);
        __Pyx_GIVEREF(__pyx_v_ti);
        PyTuple_SET_ITEM(__pyx_t_15, 2+__pyx_t_7, __pyx_v_ti);
        __Pyx_INCREF(__pyx_v_tf);
        __Pyx_GIVEREF(__pyx_v_tf);
        PyTuple_SET_ITEM(__pyx_t_15, 3+__pyx_t_7, __pyx_v_tf);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_15, 4+__pyx_t_7, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_15, 5+__pyx_t_7, __pyx_t_3);
        __pyx_t_6 = 0;
        __pyx_t_5 = 0;
        __pyx_t_4 = 0;
        __pyx_t_3 = 0;
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_15, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3583, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+3586:                 _xm = np.divide(_xm, self.Omega)
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3586, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_divide); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3586, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __pyx_memoryview_fromslice(__pyx_v__xm, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3586, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_3 = PyFloat_FromDouble(__pyx_v_self->Omega); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3586, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = NULL;
      __pyx_t_7 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_15);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_15, function);
          __pyx_t_7 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_15)) {
        PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_8, __pyx_t_3};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3586, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) {
        PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_8, __pyx_t_3};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3586, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      } else
      #endif
      {
        __pyx_t_5 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3586, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        if (__pyx_t_4) {
          __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_7, __pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_7, __pyx_t_3);
        __pyx_t_8 = 0;
        __pyx_t_3 = 0;
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3586, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      }
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 3586, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_XDEC_MEMVIEW(&__pyx_v__xm, 1);
      __pyx_v__xm = __pyx_t_16;
      __pyx_t_16.memview = NULL;
      __pyx_t_16.data = NULL;
+3587:                 self._xm = np.copy(_xm)
      __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3587, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_copy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3587, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __pyx_t_15 = __pyx_memoryview_fromslice(__pyx_v__xm, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3587, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_t_15) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_15);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3587, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3587, __pyx_L1_error)
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_v_self->_xm);
      __Pyx_DECREF(((PyObject *)__pyx_v_self->_xm));
      __pyx_v_self->_xm = ((PyArrayObject *)__pyx_t_2);
      __pyx_t_2 = 0;
+3588:                 self._interp = []
      __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3588, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_v_self->_interp);
      __Pyx_DECREF(__pyx_v_self->_interp);
      __pyx_v_self->_interp = ((PyObject*)__pyx_t_2);
      __pyx_t_2 = 0;
+3589:                 times = np.linspace(ti, tf, inter_steps*steps)
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3589, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_linspace); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3589, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyInt_FromSsize_t((__pyx_v_inter_steps * __pyx_v_steps)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3589, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = NULL;
      __pyx_t_7 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_15);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_15, function);
          __pyx_t_7 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_15)) {
        PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_ti, __pyx_v_tf, __pyx_t_5};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3589, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) {
        PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_ti, __pyx_v_tf, __pyx_t_5};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3589, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      } else
      #endif
      {
        __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3589, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (__pyx_t_3) {
          __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3); __pyx_t_3 = NULL;
        }
        __Pyx_INCREF(__pyx_v_ti);
        __Pyx_GIVEREF(__pyx_v_ti);
        PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_v_ti);
        __Pyx_INCREF(__pyx_v_tf);
        __Pyx_GIVEREF(__pyx_v_tf);
        PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_tf);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_t_5);
        __pyx_t_5 = 0;
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3589, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF_SET(__pyx_v_times, __pyx_t_2);
      __pyx_t_2 = 0;
+3590:                 for i in range(_xm.shape[1]):
      __pyx_t_17 = (__pyx_v__xm.shape[1]);
      __pyx_t_18 = __pyx_t_17;
      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
        __pyx_v_i = __pyx_t_19;
+3591:                     self._interp.append(interpolate.interp1d(times, _xm[:,i],
        if (unlikely(__pyx_v_self->_interp == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
          __PYX_ERR(0, 3591, __pyx_L1_error)
        }
        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_interpolate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3591, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_interp1d); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3591, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_9.data = __pyx_v__xm.data;
        __pyx_t_9.memview = __pyx_v__xm.memview;
        __PYX_INC_MEMVIEW(&__pyx_t_9, 0);
        __pyx_t_9.shape[0] = __pyx_v__xm.shape[0];
__pyx_t_9.strides[0] = __pyx_v__xm.strides[0];
    __pyx_t_9.suboffsets[0] = -1;

{
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v__xm.strides[1];
        __pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_2 = __pyx_memoryview_fromslice(__pyx_t_9, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3591, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
        __pyx_t_9.memview = NULL;
        __pyx_t_9.data = NULL;
        __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3591, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_INCREF(__pyx_v_times);
        __Pyx_GIVEREF(__pyx_v_times);
        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_times);
        __Pyx_GIVEREF(__pyx_t_2);
        PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_2);
        __pyx_t_2 = 0;
/* … */
        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3591, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_20 = __Pyx_PyList_Append(__pyx_v_self->_interp, __pyx_t_5); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 3591, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      }
+3592:                                                              kind='linear'))
        __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3592, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_kind, __pyx_n_u_linear) < 0) __PYX_ERR(0, 3592, __pyx_L1_error)
+3593:                 xm = _xm[::inter_steps]
      __pyx_t_16.data = __pyx_v__xm.data;
      __pyx_t_16.memview = __pyx_v__xm.memview;
      __PYX_INC_MEMVIEW(&__pyx_t_16, 0);
      __pyx_t_7 = -1;
      if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_16,
    __pyx_v__xm.shape[0], __pyx_v__xm.strides[0], __pyx_v__xm.suboffsets[0],
    0,
    0,
    &__pyx_t_7,
    0,
    0,
    __pyx_v_inter_steps,
    0,
    0,
    1,
    1) < 0))
{
    __PYX_ERR(0, 3593, __pyx_L1_error)
}

__pyx_t_16.shape[1] = __pyx_v__xm.shape[1];
__pyx_t_16.strides[1] = __pyx_v__xm.strides[1];
    __pyx_t_16.suboffsets[1] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_v_xm, 1);
      __pyx_v_xm = __pyx_t_16;
      __pyx_t_16.memview = NULL;
      __pyx_t_16.data = NULL;
+3594:                 sol = self.interpolate_euler
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_interpolate_euler); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3594, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_XDECREF_SET(__pyx_v_sol, __pyx_t_5);
      __pyx_t_5 = 0;
 3595:             else:
+3596:                 xm, sol = self.integrate(xi, ti, tf, steps, dense_output=True)
    /*else*/ {
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_integrate); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3596, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_xi, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3596, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_steps); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3596, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_15 = PyTuple_New(4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3596, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);
      __Pyx_INCREF(__pyx_v_ti);
      __Pyx_GIVEREF(__pyx_v_ti);
      PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_ti);
      __Pyx_INCREF(__pyx_v_tf);
      __Pyx_GIVEREF(__pyx_v_tf);
      PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_v_tf);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_15, 3, __pyx_t_8);
      __pyx_t_2 = 0;
      __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3596, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dense_output, Py_True) < 0) __PYX_ERR(0, 3596, __pyx_L1_error)
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_15, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3596, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
        PyObject* sequence = __pyx_t_2;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 3596, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_15 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_8 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_15 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_15);
        #else
        __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3596, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_15 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3596, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        #endif
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3596, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_21 = Py_TYPE(__pyx_t_5)->tp_iternext;
        index = 0; __pyx_t_8 = __pyx_t_21(__pyx_t_5); if (unlikely(!__pyx_t_8)) goto __pyx_L8_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_8);
        index = 1; __pyx_t_15 = __pyx_t_21(__pyx_t_5); if (unlikely(!__pyx_t_15)) goto __pyx_L8_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_15);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_21(__pyx_t_5), 2) < 0) __PYX_ERR(0, 3596, __pyx_L1_error)
        __pyx_t_21 = NULL;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        goto __pyx_L9_unpacking_done;
        __pyx_L8_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_21 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 3596, __pyx_L1_error)
        __pyx_L9_unpacking_done:;
      }
      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 3596, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_XDEC_MEMVIEW(&__pyx_v_xm, 1);
      __pyx_v_xm = __pyx_t_16;
      __pyx_t_16.memview = NULL;
      __pyx_t_16.data = NULL;
      __Pyx_XDECREF_SET(__pyx_v_sol, __pyx_t_15);
      __pyx_t_15 = 0;
    }
    __pyx_L5:;
+3597:             self.integrator_step_count = 0
    __pyx_v_self->integrator_step_count = 0;
+3598:             cov = self._estimate_cond_cov(sol, ti, tf)
    __pyx_t_22 = __pyx_PyFloat_AsDouble(__pyx_v_ti); if (unlikely((__pyx_t_22 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3598, __pyx_L1_error)
    __pyx_t_23 = __pyx_PyFloat_AsDouble(__pyx_v_tf); if (unlikely((__pyx_t_23 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3598, __pyx_L1_error)
    __pyx_t_2 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->_estimate_cond_cov(__pyx_v_self, __pyx_v_sol, __pyx_t_22, __pyx_t_23); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3598, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 3598, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_cov, 1);
    __pyx_v_cov = __pyx_t_16;
    __pyx_t_16.memview = NULL;
    __pyx_t_16.data = NULL;
+3599:             dev = np.subtract(xf, xm[steps-1])
    __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3599, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_subtract); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3599, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_15 = __pyx_memoryview_fromslice(__pyx_v_xf, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3599, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_9.data = __pyx_v_xm.data;
    __pyx_t_9.memview = __pyx_v_xm.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_9, 0);
    {
    Py_ssize_t __pyx_tmp_idx = (__pyx_v_steps - 1);
    Py_ssize_t __pyx_tmp_stride = __pyx_v_xm.strides[0];
        __pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_9.shape[0] = __pyx_v_xm.shape[1];
__pyx_t_9.strides[0] = __pyx_v_xm.strides[1];
    __pyx_t_9.suboffsets[0] = -1;

__pyx_t_5 = __pyx_memoryview_fromslice(__pyx_t_9, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3599, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
    __pyx_t_9.memview = NULL;
    __pyx_t_9.data = NULL;
    __pyx_t_3 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
        __pyx_t_7 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_15, __pyx_t_5};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3599, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_15, __pyx_t_5};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3599, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    {
      __pyx_t_4 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3599, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (__pyx_t_3) {
        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_15);
      PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_7, __pyx_t_15);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_7, __pyx_t_5);
      __pyx_t_15 = 0;
      __pyx_t_5 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3599, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 3599, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_dev, 1);
    __pyx_v_dev = __pyx_t_9;
    __pyx_t_9.memview = NULL;
    __pyx_t_9.data = NULL;
+3600:             log_p += self._log_cond_p(dev, cov)
    __pyx_v_log_p = (__pyx_v_log_p + ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->_log_cond_p(__pyx_v_self, __pyx_v_dev, __pyx_v_cov));
  }
+3601:         return -log_p
  __pyx_r = (-__pyx_v_log_p);
  goto __pyx_L0;
 3602: 
+3603:     cdef double _obtain_logp_for_lat_traj(self, double [:] x0, double [:] obs_flattened, np.ndarray fltr,
static double __pyx_f_6pyross_9inference_8SIR_type__obtain_logp_for_lat_traj(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, __Pyx_memviewslice __pyx_v_x0, __Pyx_memviewslice __pyx_v_obs_flattened, PyArrayObject *__pyx_v_fltr, double __pyx_v_Tf, struct __pyx_opt_args_6pyross_9inference_8SIR_type__obtain_logp_for_lat_traj *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_18);
  __PYX_XDEC_MEMVIEW(&__pyx_t_20, 1);
  __Pyx_XDECREF(__pyx_t_21);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cov_red.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_full_cov.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_WriteUnraisable("pyross.inference.SIR_type._obtain_logp_for_lat_traj", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cov_red.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_full_cov.rcbuffer->pybuffer);
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_xm, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_xm_red, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dev, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_cov_red);
  __Pyx_XDECREF((PyObject *)__pyx_v_full_cov);
  __Pyx_XDECREF(__pyx_v_full_fltr);
  __Pyx_XDECREF(__pyx_v_cov_red_inv_dev);
  __Pyx_XDECREF(__pyx_v_ldet);
  __Pyx_XDECREF(__pyx_v_log_p);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_6pyross_9inference_8SIR_type__obtain_logp_for_lat_traj {
  int __pyx_n;
  PyObject *tangent;
  Py_ssize_t inter_steps;
};
+3604:                                             double Tf, tangent=False,
  PyObject *__pyx_v_tangent = ((PyObject *)Py_False);
  Py_ssize_t __pyx_v_inter_steps = ((Py_ssize_t)0);
  Py_ssize_t __pyx_v_reduced_dim;
  Py_ssize_t __pyx_v_Nf;
  __Pyx_memviewslice __pyx_v_xm = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_xm_red = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dev = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_v_cov_red = 0;
  PyArrayObject *__pyx_v_full_cov = 0;
  PyObject *__pyx_v_full_fltr = NULL;
  PyObject *__pyx_v_cov_red_inv_dev = NULL;
  PyObject *__pyx_v_ldet = NULL;
  PyObject *__pyx_v_log_p = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_cov_red;
  __Pyx_Buffer __pyx_pybuffer_cov_red;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_full_cov;
  __Pyx_Buffer __pyx_pybuffer_full_cov;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_obtain_logp_for_lat_traj", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tangent = __pyx_optional_args->tangent;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_inter_steps = __pyx_optional_args->inter_steps;
      }
    }
  }
  __pyx_pybuffer_cov_red.pybuffer.buf = NULL;
  __pyx_pybuffer_cov_red.refcount = 0;
  __pyx_pybuffernd_cov_red.data = NULL;
  __pyx_pybuffernd_cov_red.rcbuffer = &__pyx_pybuffer_cov_red;
  __pyx_pybuffer_full_cov.pybuffer.buf = NULL;
  __pyx_pybuffer_full_cov.refcount = 0;
  __pyx_pybuffernd_full_cov.data = NULL;
  __pyx_pybuffernd_full_cov.rcbuffer = &__pyx_pybuffer_full_cov;
 3605:                                          Py_ssize_t inter_steps=0):
 3606:         cdef:
+3607:             Py_ssize_t reduced_dim=obs_flattened.shape[0], Nf=fltr.shape[0]+1
  __pyx_v_reduced_dim = (__pyx_v_obs_flattened.shape[0]);
  __pyx_v_Nf = ((__pyx_v_fltr->dimensions[0]) + 1);
 3608:             double [:, :] xm
 3609:             double [:] xm_red, dev
 3610:             np.ndarray[DTYPE_t, ndim=2] cov_red, full_cov
+3611:         if tangent:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_tangent); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3611, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+3612:             xm, full_cov = self.obtain_full_mean_cov_tangent_space(x0, Tf, Nf, inter_steps=inter_steps)
    __pyx_t_3.__pyx_n = 1;
    __pyx_t_3.inter_steps = __pyx_v_inter_steps;
    __pyx_t_2 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->obtain_full_mean_cov_tangent_space(__pyx_v_self, __pyx_v_x0, __pyx_v_Tf, __pyx_v_Nf, 0, &__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3612, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
      PyObject* sequence = __pyx_t_2;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 3612, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      #else
      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3612, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3612, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3612, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
      index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L4_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_4);
      index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 3612, __pyx_L1_error)
      __pyx_t_7 = NULL;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      goto __pyx_L5_unpacking_done;
      __pyx_L4_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 3612, __pyx_L1_error)
      __pyx_L5_unpacking_done:;
    }
    __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 3612, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3612, __pyx_L1_error)
    __pyx_v_xm = __pyx_t_8;
    __pyx_t_8.memview = NULL;
    __pyx_t_8.data = NULL;
    __pyx_t_9 = ((PyArrayObject *)__pyx_t_5);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_full_cov.rcbuffer->pybuffer);
      __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_full_cov.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_10 < 0)) {
        PyErr_Fetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_full_cov.rcbuffer->pybuffer, (PyObject*)__pyx_v_full_cov, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
        }
        __pyx_t_11 = __pyx_t_12 = __pyx_t_13 = 0;
      }
      __pyx_pybuffernd_full_cov.diminfo[0].strides = __pyx_pybuffernd_full_cov.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_full_cov.diminfo[0].shape = __pyx_pybuffernd_full_cov.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_full_cov.diminfo[1].strides = __pyx_pybuffernd_full_cov.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_full_cov.diminfo[1].shape = __pyx_pybuffernd_full_cov.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3612, __pyx_L1_error)
    }
    __pyx_t_9 = 0;
    __pyx_v_full_cov = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
 3613:         else:
+3614:             try:
  /*else*/ {
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      goto __pyx_L11_try_end;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_12, __pyx_t_11);
      goto __pyx_L1_error;
      __pyx_L9_except_return:;
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_12, __pyx_t_11);
      goto __pyx_L0;
      __pyx_L11_try_end:;
    }
  }
  __pyx_L3:;
+3615:                 xm, full_cov = self.obtain_full_mean_cov(x0, Tf, Nf, inter_steps=inter_steps)
        __pyx_t_14.__pyx_n = 1;
        __pyx_t_14.inter_steps = __pyx_v_inter_steps;
        __pyx_t_2 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->obtain_full_mean_cov(__pyx_v_self, __pyx_v_x0, __pyx_v_Tf, __pyx_v_Nf, 0, &__pyx_t_14); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3615, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_2);
        if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
          PyObject* sequence = __pyx_t_2;
          Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
          if (unlikely(size != 2)) {
            if (size > 2) __Pyx_RaiseTooManyValuesError(2);
            else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
            __PYX_ERR(0, 3615, __pyx_L6_error)
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          if (likely(PyTuple_CheckExact(sequence))) {
            __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
            __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
          } else {
            __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
            __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
          }
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_4);
          #else
          __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3615, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3615, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        } else {
          Py_ssize_t index = -1;
          __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3615, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
          index = 0; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L12_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_5);
          index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L12_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_4);
          if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 3615, __pyx_L6_error)
          __pyx_t_7 = NULL;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          goto __pyx_L13_unpacking_done;
          __pyx_L12_unpacking_failed:;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_7 = NULL;
          if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
          __PYX_ERR(0, 3615, __pyx_L6_error)
          __pyx_L13_unpacking_done:;
        }
        __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 3615, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3615, __pyx_L6_error)
        __pyx_v_xm = __pyx_t_8;
        __pyx_t_8.memview = NULL;
        __pyx_t_8.data = NULL;
        __pyx_t_9 = ((PyArrayObject *)__pyx_t_4);
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_full_cov.rcbuffer->pybuffer);
          __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_full_cov.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
          if (unlikely(__pyx_t_10 < 0)) {
            PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_full_cov.rcbuffer->pybuffer, (PyObject*)__pyx_v_full_cov, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
            }
            __pyx_t_15 = __pyx_t_16 = __pyx_t_17 = 0;
          }
          __pyx_pybuffernd_full_cov.diminfo[0].strides = __pyx_pybuffernd_full_cov.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_full_cov.diminfo[0].shape = __pyx_pybuffernd_full_cov.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_full_cov.diminfo[1].strides = __pyx_pybuffernd_full_cov.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_full_cov.diminfo[1].shape = __pyx_pybuffernd_full_cov.rcbuffer->pybuffer.shape[1];
          if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3615, __pyx_L6_error)
        }
        __pyx_t_9 = 0;
        __pyx_v_full_cov = ((PyArrayObject *)__pyx_t_4);
        __pyx_t_4 = 0;
+3616:             except MaxIntegratorStepsException:
      __Pyx_ErrFetch(&__pyx_t_2, &__pyx_t_4, &__pyx_t_5);
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_MaxIntegratorStepsException); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3616, __pyx_L8_except_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_10 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_2, __pyx_t_6);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_ErrRestore(__pyx_t_2, __pyx_t_4, __pyx_t_5);
      __pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0;
      if (__pyx_t_10) {
        __Pyx_AddTraceback("pyross.inference.SIR_type._obtain_logp_for_lat_traj", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_2) < 0) __PYX_ERR(0, 3616, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_GOTREF(__pyx_t_2);
+3617:                 return np.Inf
        __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3617, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_Inf); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3617, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_19 = __pyx_PyFloat_AsDouble(__pyx_t_18); if (unlikely((__pyx_t_19 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3617, __pyx_L8_except_error)
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __pyx_r = __pyx_t_19;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        goto __pyx_L9_except_return;
      }
      goto __pyx_L8_except_error;
      __pyx_L8_except_error:;
+3618:         full_fltr = sparse.block_diag(fltr)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_sparse); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3618, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_block_diag); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3618, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, ((PyObject *)__pyx_v_fltr)) : __Pyx_PyObject_CallOneArg(__pyx_t_5, ((PyObject *)__pyx_v_fltr));
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3618, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_full_fltr = __pyx_t_2;
  __pyx_t_2 = 0;
+3619:         cov_red = full_fltr@full_cov@np.transpose(full_fltr)
  __pyx_t_2 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_full_fltr, ((PyObject *)__pyx_v_full_cov)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_transpose); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_18))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_18);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_18);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_18, function);
    }
  }
  __pyx_t_5 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_18, __pyx_t_4, __pyx_v_full_fltr) : __Pyx_PyObject_CallOneArg(__pyx_t_18, __pyx_v_full_fltr);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __pyx_t_18 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_18) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_18, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3619, __pyx_L1_error)
  __pyx_t_9 = ((PyArrayObject *)__pyx_t_18);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cov_red.rcbuffer->pybuffer);
    __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_cov_red.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_10 < 0)) {
      PyErr_Fetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_cov_red.rcbuffer->pybuffer, (PyObject*)__pyx_v_cov_red, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      }
      __pyx_t_11 = __pyx_t_12 = __pyx_t_13 = 0;
    }
    __pyx_pybuffernd_cov_red.diminfo[0].strides = __pyx_pybuffernd_cov_red.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_cov_red.diminfo[0].shape = __pyx_pybuffernd_cov_red.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_cov_red.diminfo[1].strides = __pyx_pybuffernd_cov_red.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_cov_red.diminfo[1].shape = __pyx_pybuffernd_cov_red.rcbuffer->pybuffer.shape[1];
    if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 3619, __pyx_L1_error)
  }
  __pyx_t_9 = 0;
  __pyx_v_cov_red = ((PyArrayObject *)__pyx_t_18);
  __pyx_t_18 = 0;
+3620:         xm_red = full_fltr@(np.ravel(xm))
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3620, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ravel); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3620, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_xm, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3620, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_18 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3620, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_full_fltr, __pyx_t_18); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3620, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __pyx_t_20 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_20.memview)) __PYX_ERR(0, 3620, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_xm_red = __pyx_t_20;
  __pyx_t_20.memview = NULL;
  __pyx_t_20.data = NULL;
+3621:         dev=np.subtract(obs_flattened, xm_red)
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_n_s_np); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3621, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_n_s_subtract); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3621, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __pyx_t_18 = __pyx_memoryview_fromslice(__pyx_v_obs_flattened, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3621, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_xm_red, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3621, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_18, __pyx_t_4};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3621, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_18, __pyx_t_4};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3621, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_21 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 3621, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_21);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_21, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_18);
    PyTuple_SET_ITEM(__pyx_t_21, 0+__pyx_t_10, __pyx_t_18);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_21, 1+__pyx_t_10, __pyx_t_4);
    __pyx_t_18 = 0;
    __pyx_t_4 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_21, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3621, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_20 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_20.memview)) __PYX_ERR(0, 3621, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_dev = __pyx_t_20;
  __pyx_t_20.memview = NULL;
  __pyx_t_20.data = NULL;
+3622:         cov_red_inv_dev, ldet = pyross.utils.solve_symmetric_close_to_singular(cov_red, dev)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyross); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3622, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_21 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_utils); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 3622, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_21, __pyx_n_s_solve_symmetric_close_to_singula); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3622, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  __pyx_t_21 = __pyx_memoryview_fromslice(__pyx_v_dev, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 3622, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __pyx_t_4 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, ((PyObject *)__pyx_v_cov_red), __pyx_t_21};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3622, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, ((PyObject *)__pyx_v_cov_red), __pyx_t_21};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3622, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  } else
  #endif
  {
    __pyx_t_18 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3622, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_v_cov_red));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_cov_red));
    PyTuple_SET_ITEM(__pyx_t_18, 0+__pyx_t_10, ((PyObject *)__pyx_v_cov_red));
    __Pyx_GIVEREF(__pyx_t_21);
    PyTuple_SET_ITEM(__pyx_t_18, 1+__pyx_t_10, __pyx_t_21);
    __pyx_t_21 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_18, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3622, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 3622, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_18 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_18 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_18);
    #else
    __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3622, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_18 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3622, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_21 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 3622, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_21);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_21)->tp_iternext;
    index = 0; __pyx_t_5 = __pyx_t_7(__pyx_t_21); if (unlikely(!__pyx_t_5)) goto __pyx_L16_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    index = 1; __pyx_t_18 = __pyx_t_7(__pyx_t_21); if (unlikely(!__pyx_t_18)) goto __pyx_L16_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_18);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_21), 2) < 0) __PYX_ERR(0, 3622, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
    goto __pyx_L17_unpacking_done;
    __pyx_L16_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 3622, __pyx_L1_error)
    __pyx_L17_unpacking_done:;
  }
  __pyx_v_cov_red_inv_dev = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_ldet = __pyx_t_18;
  __pyx_t_18 = 0;
+3623:         log_p = -np.dot(dev, cov_red_inv_dev)*(self.Omega/2.)
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_n_s_np); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_n_s_dot); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __pyx_t_18 = __pyx_memoryview_fromslice(__pyx_v_dev, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_21 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_21 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_21)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_21);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_21, __pyx_t_18, __pyx_v_cov_red_inv_dev};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3623, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_21, __pyx_t_18, __pyx_v_cov_red_inv_dev};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3623, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3623, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_21) {
      __Pyx_GIVEREF(__pyx_t_21); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_21); __pyx_t_21 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_18);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_10, __pyx_t_18);
    __Pyx_INCREF(__pyx_v_cov_red_inv_dev);
    __Pyx_GIVEREF(__pyx_v_cov_red_inv_dev);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_10, __pyx_v_cov_red_inv_dev);
    __pyx_t_18 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3623, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Negative(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble((__pyx_v_self->Omega / 2.)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyNumber_Multiply(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_log_p = __pyx_t_4;
  __pyx_t_4 = 0;
+3624:         log_p -= (ldet-reduced_dim*log(self.Omega))/2. + (reduced_dim/2.)*log(2.*PI)
  __pyx_t_4 = PyFloat_FromDouble((__pyx_v_reduced_dim * log(__pyx_v_self->Omega))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = PyNumber_Subtract(__pyx_v_ldet, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyFloat_TrueDivideObjC(__pyx_t_2, __pyx_float_2_, 2., 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(((((double)__pyx_v_reduced_dim) / 2.) * log((2. * __pyx_v_6pyross_9inference_PI)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PyNumber_Add(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_InPlaceSubtract(__pyx_v_log_p, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF_SET(__pyx_v_log_p, __pyx_t_2);
  __pyx_t_2 = 0;
+3625:         log_p -= reduced_dim*np.log(self.Omega)
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_reduced_dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_log); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_self->Omega); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_21 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_18))) {
    __pyx_t_21 = PyMethod_GET_SELF(__pyx_t_18);
    if (likely(__pyx_t_21)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_18);
      __Pyx_INCREF(__pyx_t_21);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_18, function);
    }
  }
  __pyx_t_5 = (__pyx_t_21) ? __Pyx_PyObject_Call2Args(__pyx_t_18, __pyx_t_21, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_18, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __pyx_t_18 = PyNumber_Multiply(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_InPlaceSubtract(__pyx_v_log_p, __pyx_t_18); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_DECREF_SET(__pyx_v_log_p, __pyx_t_5);
  __pyx_t_5 = 0;
+3626:         return -log_p
  __pyx_t_5 = PyNumber_Negative(__pyx_v_log_p); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_19 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_19 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3626, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_r = __pyx_t_19;
  goto __pyx_L0;
 3627: 
 3628: 
+3629:     cdef double _obtain_square_dev_for_lat_traj(self, double [:] x0, double [:] obs_flattened, np.ndarray fltr,
static double __pyx_f_6pyross_9inference_8SIR_type__obtain_square_dev_for_lat_traj(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, __Pyx_memviewslice __pyx_v_x0, __Pyx_memviewslice __pyx_v_obs_flattened, PyArrayObject *__pyx_v_fltr, double __pyx_v_Tf) {
  CYTHON_UNUSED Py_ssize_t __pyx_v_reduced_dim;
  Py_ssize_t __pyx_v_Nf;
  __Pyx_memviewslice __pyx_v_xm = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_xm_red = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dev = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_full_fltr = NULL;
  PyObject *__pyx_v_sqdev = NULL;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_obtain_square_dev_for_lat_traj", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_WriteUnraisable("pyross.inference.SIR_type._obtain_square_dev_for_lat_traj", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_xm, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_xm_red, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dev, 1);
  __Pyx_XDECREF(__pyx_v_full_fltr);
  __Pyx_XDECREF(__pyx_v_sqdev);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3630:                                             double Tf):
 3631:         cdef:
+3632:             Py_ssize_t reduced_dim=obs_flattened.shape[0], Nf=fltr.shape[0]+1
  __pyx_v_reduced_dim = (__pyx_v_obs_flattened.shape[0]);
  __pyx_v_Nf = ((__pyx_v_fltr->dimensions[0]) + 1);
 3633:             double [:, :] xm
 3634:             double [:] xm_red, dev
 3635: 
+3636:         xm = self.integrate(x0, 0, Tf, Nf, dense_output=False,
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_integrate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3636, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_x0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3636, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Tf); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3636, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_Nf); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3636, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3636, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_0);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3636, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dense_output, Py_False) < 0) __PYX_ERR(0, 3636, __pyx_L1_error)
/* … */
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3636, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 3636, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_xm = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+3637:                                            max_step=self.steps*Nf)
  __pyx_t_3 = PyInt_FromSsize_t((__pyx_v_self->steps * __pyx_v_Nf)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3637, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_max_step, __pyx_t_3) < 0) __PYX_ERR(0, 3636, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3638:         xm = xm[1:]
  __pyx_t_6.data = __pyx_v_xm.data;
  __pyx_t_6.memview = __pyx_v_xm.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_6, 0);
  __pyx_t_7 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_6,
    __pyx_v_xm.shape[0], __pyx_v_xm.strides[0], __pyx_v_xm.suboffsets[0],
    0,
    0,
    &__pyx_t_7,
    1,
    0,
    0,
    1,
    0,
    0,
    1) < 0))
{
    __PYX_ERR(0, 3638, __pyx_L1_error)
}

__pyx_t_6.shape[1] = __pyx_v_xm.shape[1];
__pyx_t_6.strides[1] = __pyx_v_xm.strides[1];
    __pyx_t_6.suboffsets[1] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_v_xm, 1);
  __pyx_v_xm = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+3639:         full_fltr = sparse.block_diag(fltr)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_sparse); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3639, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_block_diag); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3639, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, ((PyObject *)__pyx_v_fltr)) : __Pyx_PyObject_CallOneArg(__pyx_t_5, ((PyObject *)__pyx_v_fltr));
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3639, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_full_fltr = __pyx_t_3;
  __pyx_t_3 = 0;
+3640:         xm_red = full_fltr@(np.ravel(xm))
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ravel); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_xm, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_full_fltr, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 3640, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_xm_red = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+3641:         dev=np.subtract(obs_flattened, xm_red)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_subtract); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_obs_flattened, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_xm_red, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_1};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3641, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_1};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3641, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_7, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_7, __pyx_t_1);
    __pyx_t_3 = 0;
    __pyx_t_1 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 3641, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_dev = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+3642:         sqdev = np.sum(np.square(dev))
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3642, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_sum); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3642, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3642, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_square); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3642, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_dev, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3642, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3642, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_9, function);
    }
  }
  __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3642, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_sqdev = __pyx_t_4;
  __pyx_t_4 = 0;
+3643:         return sqdev
  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_sqdev); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3643, __pyx_L1_error)
  __pyx_r = __pyx_t_10;
  goto __pyx_L0;
 3644: 
+3645:     cdef double _obtain_square_dev_for_lat_traj_diff(self, double [:] x0, double [:] obs_flattened, np.ndarray fltr,
static double __pyx_f_6pyross_9inference_8SIR_type__obtain_square_dev_for_lat_traj_diff(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, __Pyx_memviewslice __pyx_v_x0, __Pyx_memviewslice __pyx_v_obs_flattened, PyArrayObject *__pyx_v_fltr, double __pyx_v_Tf) {
  Py_ssize_t __pyx_v_reduced_dim;
  Py_ssize_t __pyx_v_Nf;
  __Pyx_memviewslice __pyx_v_xm = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_xm_red = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dev = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_full_fltr = NULL;
  PyObject *__pyx_v_sqdev = NULL;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_obtain_square_dev_for_lat_traj_diff", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("pyross.inference.SIR_type._obtain_square_dev_for_lat_traj_diff", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_xm, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_xm_red, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dev, 1);
  __Pyx_XDECREF(__pyx_v_full_fltr);
  __Pyx_XDECREF(__pyx_v_sqdev);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3646:                                             double Tf):
 3647:         cdef:
+3648:             Py_ssize_t reduced_dim=obs_flattened.shape[0], Nf=fltr.shape[0]+1
  __pyx_v_reduced_dim = (__pyx_v_obs_flattened.shape[0]);
  __pyx_v_Nf = ((__pyx_v_fltr->dimensions[0]) + 1);
 3649:             double [:, :] xm
 3650:             double [:] xm_red, dev
 3651: 
+3652:         xm = self.integrate(x0, 0, Tf, Nf, dense_output=False,
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_integrate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3652, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_x0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3652, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Tf); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3652, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_Nf); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3652, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3652, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_0);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3652, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dense_output, Py_False) < 0) __PYX_ERR(0, 3652, __pyx_L1_error)
/* … */
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3652, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 3652, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_xm = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+3653:                                            max_step=self.steps*Nf)
  __pyx_t_3 = PyInt_FromSsize_t((__pyx_v_self->steps * __pyx_v_Nf)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3653, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_max_step, __pyx_t_3) < 0) __PYX_ERR(0, 3652, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3654:         xm = np.diff(xm,axis=0)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_diff); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_xm, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 3654, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 3654, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __PYX_XDEC_MEMVIEW(&__pyx_v_xm, 1);
  __pyx_v_xm = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+3655:         full_fltr = sparse.block_diag(fltr)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_sparse); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3655, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_block_diag); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3655, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, ((PyObject *)__pyx_v_fltr)) : __Pyx_PyObject_CallOneArg(__pyx_t_5, ((PyObject *)__pyx_v_fltr));
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3655, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_full_fltr = __pyx_t_1;
  __pyx_t_1 = 0;
+3656:         xm_red = full_fltr@(np.ravel(xm))
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3656, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ravel); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3656, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_xm, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3656, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3656, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_full_fltr, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3656, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 3656, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_xm_red = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
+3657:         dev=np.subtract(obs_flattened, xm_red)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3657, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_subtract); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3657, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_obs_flattened, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3657, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_xm_red, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3657, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_1, __pyx_t_4};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3657, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_1, __pyx_t_4};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3657, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3657, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_4);
    __pyx_t_1 = 0;
    __pyx_t_4 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3657, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 3657, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_dev = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
 3658: #        sqdev = np.sum(np.square(dev)/(xm_red+np.ones(reduced_dim)))
+3659:         sqdev = np.sum(np.square(dev)/(np.abs(xm_red)+np.ones(reduced_dim)))
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_sum); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_square); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_dev, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_abs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_xm_red, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_10, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ones); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_reduced_dim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_11 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_11)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
    }
  }
  __pyx_t_2 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_11, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_5, __pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_9, function);
    }
  }
  __pyx_t_3 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_10, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_sqdev = __pyx_t_3;
  __pyx_t_3 = 0;
+3660:         return sqdev
  __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_v_sqdev); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3660, __pyx_L1_error)
  __pyx_r = __pyx_t_12;
  goto __pyx_L0;
 3661: 
+3662:     def _mean_cov_for_lat_endpoint(self, double [:] x0, double [:] obs_flattened, np.ndarray fltr,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_129_mean_cov_for_lat_endpoint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_129_mean_cov_for_lat_endpoint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_x0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_obs_flattened = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_v_fltr = 0;
  double __pyx_v_Tf;
  PyObject *__pyx_v_tangent = 0;
  Py_ssize_t __pyx_v_inter_steps;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_mean_cov_for_lat_endpoint (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x0,&__pyx_n_s_obs_flattened,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_tangent,&__pyx_n_s_inter_steps,0};
    PyObject* values[6] = {0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_128_mean_cov_for_lat_endpoint(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, __Pyx_memviewslice __pyx_v_x0, __Pyx_memviewslice __pyx_v_obs_flattened, PyArrayObject *__pyx_v_fltr, double __pyx_v_Tf, PyObject *__pyx_v_tangent, Py_ssize_t __pyx_v_inter_steps) {
  Py_ssize_t __pyx_v_Nf;
  Py_ssize_t __pyx_v_reduced_dim;
  PyObject *__pyx_v_xm = NULL;
  PyObject *__pyx_v_full_cov = NULL;
  PyObject *__pyx_v_last_fltr = NULL;
  PyObject *__pyx_v_last_obs = NULL;
  PyObject *__pyx_v_null_space = NULL;
  PyObject *__pyx_v_known_space = NULL;
  PyObject *__pyx_v_last_full_fltr = NULL;
  PyObject *__pyx_v_full_fltr = NULL;
  PyObject *__pyx_v_cov_red = NULL;
  PyObject *__pyx_v_xm_red = NULL;
  PyObject *__pyx_v_xm_known = NULL;
  PyObject *__pyx_v_dev = NULL;
  PyObject *__pyx_v_invcov = NULL;
  PyObject *__pyx_v_cov_last_red = NULL;
  PyObject *__pyx_v_xm_last_red = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_mean_cov_for_lat_endpoint", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("pyross.inference.SIR_type._mean_cov_for_lat_endpoint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_xm);
  __Pyx_XDECREF(__pyx_v_full_cov);
  __Pyx_XDECREF(__pyx_v_last_fltr);
  __Pyx_XDECREF(__pyx_v_last_obs);
  __Pyx_XDECREF(__pyx_v_null_space);
  __Pyx_XDECREF(__pyx_v_known_space);
  __Pyx_XDECREF(__pyx_v_last_full_fltr);
  __Pyx_XDECREF(__pyx_v_full_fltr);
  __Pyx_XDECREF(__pyx_v_cov_red);
  __Pyx_XDECREF(__pyx_v_xm_red);
  __Pyx_XDECREF(__pyx_v_xm_known);
  __Pyx_XDECREF(__pyx_v_dev);
  __Pyx_XDECREF(__pyx_v_invcov);
  __Pyx_XDECREF(__pyx_v_cov_last_red);
  __Pyx_XDECREF(__pyx_v_xm_last_red);
  __PYX_XDEC_MEMVIEW(&__pyx_v_x0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_obs_flattened, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3663:                                             double Tf, tangent=False, Py_ssize_t inter_steps=0):
    values[4] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x0)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs_flattened)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_mean_cov_for_lat_endpoint", 0, 4, 6, 1); __PYX_ERR(0, 3662, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_mean_cov_for_lat_endpoint", 0, 4, 6, 2); __PYX_ERR(0, 3662, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_mean_cov_for_lat_endpoint", 0, 4, 6, 3); __PYX_ERR(0, 3662, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[5] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_mean_cov_for_lat_endpoint") < 0)) __PYX_ERR(0, 3662, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_x0 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_x0.memview)) __PYX_ERR(0, 3662, __pyx_L3_error)
    __pyx_v_obs_flattened = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_obs_flattened.memview)) __PYX_ERR(0, 3662, __pyx_L3_error)
    __pyx_v_fltr = ((PyArrayObject *)values[2]);
    __pyx_v_Tf = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Tf == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3663, __pyx_L3_error)
    __pyx_v_tangent = values[4];
    if (values[5]) {
      __pyx_v_inter_steps = __Pyx_PyIndex_AsSsize_t(values[5]); if (unlikely((__pyx_v_inter_steps == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 3663, __pyx_L3_error)
    } else {
      __pyx_v_inter_steps = ((Py_ssize_t)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_mean_cov_for_lat_endpoint", 0, 4, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3662, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type._mean_cov_for_lat_endpoint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fltr), __pyx_ptype_5numpy_ndarray, 1, "fltr", 0))) __PYX_ERR(0, 3662, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_128_mean_cov_for_lat_endpoint(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_x0, __pyx_v_obs_flattened, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_tangent, __pyx_v_inter_steps);
 3664:         cdef:
+3665:             Py_ssize_t Nf=fltr.shape[0]+1, reduced_dim=obs_flattened.shape[0]
  __pyx_v_Nf = ((__pyx_v_fltr->dimensions[0]) + 1);
  __pyx_v_reduced_dim = (__pyx_v_obs_flattened.shape[0]);
+3666:         if tangent:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_tangent); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3666, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+3667:             xm, full_cov = self.obtain_full_mean_cov_tangent_space(x0, Tf, Nf, inter_steps=inter_steps)
    __pyx_t_3.__pyx_n = 1;
    __pyx_t_3.inter_steps = __pyx_v_inter_steps;
    __pyx_t_2 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->obtain_full_mean_cov_tangent_space(__pyx_v_self, __pyx_v_x0, __pyx_v_Tf, __pyx_v_Nf, 0, &__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3667, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
      PyObject* sequence = __pyx_t_2;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 3667, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      #else
      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3667, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3667, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3667, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
      index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L4_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_4);
      index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 3667, __pyx_L1_error)
      __pyx_t_7 = NULL;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      goto __pyx_L5_unpacking_done;
      __pyx_L4_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 3667, __pyx_L1_error)
      __pyx_L5_unpacking_done:;
    }
    __pyx_v_xm = __pyx_t_4;
    __pyx_t_4 = 0;
    __pyx_v_full_cov = __pyx_t_5;
    __pyx_t_5 = 0;
 3668:         else:
+3669:             xm, full_cov = self.obtain_full_mean_cov(x0, Tf, Nf, inter_steps=inter_steps)
  /*else*/ {
    __pyx_t_8.__pyx_n = 1;
    __pyx_t_8.inter_steps = __pyx_v_inter_steps;
    __pyx_t_2 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->obtain_full_mean_cov(__pyx_v_self, __pyx_v_x0, __pyx_v_Tf, __pyx_v_Nf, 0, &__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3669, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
      PyObject* sequence = __pyx_t_2;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 3669, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      #else
      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3669, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3669, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3669, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
      index = 0; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_4);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 3669, __pyx_L1_error)
      __pyx_t_7 = NULL;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      goto __pyx_L7_unpacking_done;
      __pyx_L6_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 3669, __pyx_L1_error)
      __pyx_L7_unpacking_done:;
    }
    __pyx_v_xm = __pyx_t_5;
    __pyx_t_5 = 0;
    __pyx_v_full_cov = __pyx_t_4;
    __pyx_t_4 = 0;
  }
  __pyx_L3:;
+3670:         last_fltr = fltr[Nf-2]
  __pyx_t_9 = (__pyx_v_Nf - 2);
  __pyx_t_2 = __Pyx_GetItemInt(((PyObject *)__pyx_v_fltr), __pyx_t_9, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3670, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_last_fltr = __pyx_t_2;
  __pyx_t_2 = 0;
+3671:         last_obs = obs_flattened[reduced_dim-last_fltr.shape[0]:]
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_reduced_dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3671, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_last_fltr, __pyx_n_s_shape); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3671, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3671, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_Subtract(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3671, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 3671, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_10.data = __pyx_v_obs_flattened.data;
  __pyx_t_10.memview = __pyx_v_obs_flattened.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_10, 0);
  __pyx_t_11 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_10,
    __pyx_v_obs_flattened.shape[0], __pyx_v_obs_flattened.strides[0], __pyx_v_obs_flattened.suboffsets[0],
    0,
    0,
    &__pyx_t_11,
    __pyx_t_9,
    0,
    0,
    1,
    0,
    0,
    1) < 0))
{
    __PYX_ERR(0, 3671, __pyx_L1_error)
}

__pyx_t_4 = __pyx_memoryview_fromslice(__pyx_t_10, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3671, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
  __pyx_v_last_obs = __pyx_t_4;
  __pyx_t_4 = 0;
+3672:         null_space, known_space = self._split_spaces(last_fltr, last_obs)
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_split_spaces); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3672, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = NULL;
  __pyx_t_11 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_11 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_last_fltr, __pyx_v_last_obs};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3672, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_last_fltr, __pyx_v_last_obs};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3672, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_v_last_fltr);
    __Pyx_GIVEREF(__pyx_v_last_fltr);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_11, __pyx_v_last_fltr);
    __Pyx_INCREF(__pyx_v_last_obs);
    __Pyx_GIVEREF(__pyx_v_last_obs);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_11, __pyx_v_last_obs);
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
    PyObject* sequence = __pyx_t_4;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 3672, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_6);
    #else
    __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    #endif
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_2 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext;
    index = 0; __pyx_t_5 = __pyx_t_7(__pyx_t_2); if (unlikely(!__pyx_t_5)) goto __pyx_L8_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    index = 1; __pyx_t_6 = __pyx_t_7(__pyx_t_2); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_6);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_2), 2) < 0) __PYX_ERR(0, 3672, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L9_unpacking_done;
    __pyx_L8_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 3672, __pyx_L1_error)
    __pyx_L9_unpacking_done:;
  }
  __pyx_v_null_space = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_known_space = __pyx_t_6;
  __pyx_t_6 = 0;
 3673: 
+3674:         last_full_fltr = np.vstack((fltr[Nf-2], null_space))
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_vstack); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_9 = (__pyx_v_Nf - 2);
  __pyx_t_6 = __Pyx_GetItemInt(((PyObject *)__pyx_v_fltr), __pyx_t_9, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
  __Pyx_INCREF(__pyx_v_null_space);
  __Pyx_GIVEREF(__pyx_v_null_space);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_null_space);
  __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_last_full_fltr = __pyx_t_4;
  __pyx_t_4 = 0;
+3675:         full_fltr = sparse.block_diag([*fltr[:Nf-2], last_full_fltr])
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_sparse); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3675, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_block_diag); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3675, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetSlice(((PyObject *)__pyx_v_fltr), 0, (__pyx_v_Nf - 2), NULL, NULL, NULL, 0, 1, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3675, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = PySequence_List(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3675, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__Pyx_ListComp_Append(__pyx_t_5, __pyx_v_last_full_fltr) < 0) __PYX_ERR(0, 3675, __pyx_L1_error)
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3675, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_full_fltr = __pyx_t_4;
  __pyx_t_4 = 0;
+3676:         cov_red = full_fltr@full_cov@(full_fltr.T)
  __pyx_t_4 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_full_fltr, __pyx_v_full_cov); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3676, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_full_fltr, __pyx_n_s_T); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3676, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3676, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_cov_red = __pyx_t_5;
  __pyx_t_5 = 0;
+3677:         xm_red = full_fltr@np.ravel(xm)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_ravel); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_2, __pyx_v_xm) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_xm);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_full_fltr, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_xm_red = __pyx_t_4;
  __pyx_t_4 = 0;
 3678: 
+3679:         xm_known = xm_red[:reduced_dim]
  __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_v_xm_red, 0, __pyx_v_reduced_dim, NULL, NULL, NULL, 0, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3679, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_xm_known = __pyx_t_4;
  __pyx_t_4 = 0;
+3680:         dev=np.subtract(obs_flattened, xm_known)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3680, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_subtract); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3680, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_obs_flattened, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3680, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_11 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_11 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_5, __pyx_v_xm_known};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3680, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_5, __pyx_v_xm_known};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3680, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  {
    __pyx_t_12 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3680, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_11, __pyx_t_5);
    __Pyx_INCREF(__pyx_v_xm_known);
    __Pyx_GIVEREF(__pyx_v_xm_known);
    PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_11, __pyx_v_xm_known);
    __pyx_t_5 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_12, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3680, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_dev = __pyx_t_4;
  __pyx_t_4 = 0;
+3681:         invcov = np.linalg.inv(cov_red)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3681, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_linalg); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3681, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_inv); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3681, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_4 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_12, __pyx_v_cov_red) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_cov_red);
  __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3681, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_invcov = __pyx_t_4;
  __pyx_t_4 = 0;
+3682:         cov_last_red = np.linalg.inv(invcov[reduced_dim:, reduced_dim:])
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_linalg); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_inv); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = PyInt_FromSsize_t(__pyx_v_reduced_dim); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_5 = PySlice_New(__pyx_t_12, Py_None, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = PyInt_FromSsize_t(__pyx_v_reduced_dim); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_6 = PySlice_New(__pyx_t_12, Py_None, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_6);
  __pyx_t_5 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_invcov, __pyx_t_12); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_4 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_12, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_6);
  __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_cov_last_red = __pyx_t_4;
  __pyx_t_4 = 0;
+3683:         xm_last_red = xm_red[reduced_dim:] - cov_last_red@invcov[reduced_dim:, :reduced_dim]@dev
  __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_v_xm_red, __pyx_v_reduced_dim, 0, NULL, NULL, NULL, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_reduced_dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = PySlice_New(__pyx_t_2, Py_None, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_reduced_dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_12 = PySlice_New(Py_None, __pyx_t_2, Py_None); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_12);
  __pyx_t_6 = 0;
  __pyx_t_12 = 0;
  __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_v_invcov, __pyx_t_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_cov_last_red, __pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_2, __pyx_v_dev); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Subtract(__pyx_t_4, __pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3683, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_v_xm_last_red = __pyx_t_2;
  __pyx_t_2 = 0;
+3684:         return xm_last_red, cov_last_red/self.Omega, null_space, known_space
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->Omega); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_12 = __Pyx_PyNumber_Divide(__pyx_v_cov_last_red, __pyx_t_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_xm_last_red);
  __Pyx_GIVEREF(__pyx_v_xm_last_red);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_xm_last_red);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_12);
  __Pyx_INCREF(__pyx_v_null_space);
  __Pyx_GIVEREF(__pyx_v_null_space);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_null_space);
  __Pyx_INCREF(__pyx_v_known_space);
  __Pyx_GIVEREF(__pyx_v_known_space);
  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_known_space);
  __pyx_t_12 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 3685: 
+3686:     def _mean_cov_for_lat_traj(self, double [:] x0, np.ndarray obs, np.ndarray fltr,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_131_mean_cov_for_lat_traj(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_131_mean_cov_for_lat_traj(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_x0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_v_obs = 0;
  PyArrayObject *__pyx_v_fltr = 0;
  double __pyx_v_Tf;
  PyObject *__pyx_v_tangent = 0;
  Py_ssize_t __pyx_v_inter_steps;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_mean_cov_for_lat_traj (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x0,&__pyx_n_s_obs,&__pyx_n_s_fltr,&__pyx_n_s_Tf,&__pyx_n_s_tangent,&__pyx_n_s_inter_steps,0};
    PyObject* values[6] = {0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_130_mean_cov_for_lat_traj(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, __Pyx_memviewslice __pyx_v_x0, PyArrayObject *__pyx_v_obs, PyArrayObject *__pyx_v_fltr, double __pyx_v_Tf, PyObject *__pyx_v_tangent, Py_ssize_t __pyx_v_inter_steps) {
  Py_ssize_t __pyx_v_Nf;
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_dim;
  PyObject *__pyx_v_xm = NULL;
  PyObject *__pyx_v_full_cov = NULL;
  PyObject *__pyx_v_known_spaces = NULL;
  PyObject *__pyx_v_null_spaces = NULL;
  PyObject *__pyx_v_full_fltrs = NULL;
  PyObject *__pyx_v_null_space = NULL;
  PyObject *__pyx_v_full_fltr_mat = NULL;
  PyObject *__pyx_v_full_null_space = NULL;
  PyObject *__pyx_v_full_cov11 = NULL;
  PyObject *__pyx_v_full_cov12 = NULL;
  PyObject *__pyx_v_full_cov22 = NULL;
  PyObject *__pyx_v_xm_known = NULL;
  PyObject *__pyx_v_xm_null = NULL;
  PyObject *__pyx_v_obs_flattened = NULL;
  PyObject *__pyx_v_dev = NULL;
  PyObject *__pyx_v_tmp = NULL;
  PyObject *__pyx_v_cov_red = NULL;
  PyObject *__pyx_v_xm_red = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_mean_cov_for_lat_traj", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("pyross.inference.SIR_type._mean_cov_for_lat_traj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_xm);
  __Pyx_XDECREF(__pyx_v_full_cov);
  __Pyx_XDECREF(__pyx_v_known_spaces);
  __Pyx_XDECREF(__pyx_v_null_spaces);
  __Pyx_XDECREF(__pyx_v_full_fltrs);
  __Pyx_XDECREF(__pyx_v_null_space);
  __Pyx_XDECREF(__pyx_v_full_fltr_mat);
  __Pyx_XDECREF(__pyx_v_full_null_space);
  __Pyx_XDECREF(__pyx_v_full_cov11);
  __Pyx_XDECREF(__pyx_v_full_cov12);
  __Pyx_XDECREF(__pyx_v_full_cov22);
  __Pyx_XDECREF(__pyx_v_xm_known);
  __Pyx_XDECREF(__pyx_v_xm_null);
  __Pyx_XDECREF(__pyx_v_obs_flattened);
  __Pyx_XDECREF(__pyx_v_dev);
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XDECREF(__pyx_v_cov_red);
  __Pyx_XDECREF(__pyx_v_xm_red);
  __PYX_XDEC_MEMVIEW(&__pyx_v_x0, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3687:                                             double Tf, tangent=False, Py_ssize_t inter_steps=0):
    values[4] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x0)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_mean_cov_for_lat_traj", 0, 4, 6, 1); __PYX_ERR(0, 3686, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_mean_cov_for_lat_traj", 0, 4, 6, 2); __PYX_ERR(0, 3686, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_mean_cov_for_lat_traj", 0, 4, 6, 3); __PYX_ERR(0, 3686, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tangent);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[5] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_mean_cov_for_lat_traj") < 0)) __PYX_ERR(0, 3686, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_x0 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_x0.memview)) __PYX_ERR(0, 3686, __pyx_L3_error)
    __pyx_v_obs = ((PyArrayObject *)values[1]);
    __pyx_v_fltr = ((PyArrayObject *)values[2]);
    __pyx_v_Tf = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_Tf == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3687, __pyx_L3_error)
    __pyx_v_tangent = values[4];
    if (values[5]) {
      __pyx_v_inter_steps = __Pyx_PyIndex_AsSsize_t(values[5]); if (unlikely((__pyx_v_inter_steps == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 3687, __pyx_L3_error)
    } else {
      __pyx_v_inter_steps = ((Py_ssize_t)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_mean_cov_for_lat_traj", 0, 4, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3686, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type._mean_cov_for_lat_traj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obs), __pyx_ptype_5numpy_ndarray, 1, "obs", 0))) __PYX_ERR(0, 3686, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fltr), __pyx_ptype_5numpy_ndarray, 1, "fltr", 0))) __PYX_ERR(0, 3686, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_130_mean_cov_for_lat_traj(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_x0, __pyx_v_obs, __pyx_v_fltr, __pyx_v_Tf, __pyx_v_tangent, __pyx_v_inter_steps);
 3688:         cdef:
+3689:             Py_ssize_t Nf=fltr.shape[0]+1, i, dim=self.dim
  __pyx_v_Nf = ((__pyx_v_fltr->dimensions[0]) + 1);
  __pyx_t_1 = __pyx_v_self->dim;
  __pyx_v_dim = __pyx_t_1;
+3690:         if tangent:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_tangent); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3690, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+3691:             xm, full_cov = self.obtain_full_mean_cov_tangent_space(x0, Tf, Nf, inter_steps=inter_steps)
    __pyx_t_4.__pyx_n = 1;
    __pyx_t_4.inter_steps = __pyx_v_inter_steps;
    __pyx_t_3 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->obtain_full_mean_cov_tangent_space(__pyx_v_self, __pyx_v_x0, __pyx_v_Tf, __pyx_v_Nf, 0, &__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3691, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
      PyObject* sequence = __pyx_t_3;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 3691, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      #else
      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3691, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3691, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      #endif
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3691, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
      index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_6);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 3691, __pyx_L1_error)
      __pyx_t_8 = NULL;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L5_unpacking_done;
      __pyx_L4_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_8 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 3691, __pyx_L1_error)
      __pyx_L5_unpacking_done:;
    }
    __pyx_v_xm = __pyx_t_5;
    __pyx_t_5 = 0;
    __pyx_v_full_cov = __pyx_t_6;
    __pyx_t_6 = 0;
 3692:         else:
+3693:             xm, full_cov = self.obtain_full_mean_cov(x0, Tf, Nf, inter_steps=inter_steps)
  /*else*/ {
    __pyx_t_9.__pyx_n = 1;
    __pyx_t_9.inter_steps = __pyx_v_inter_steps;
    __pyx_t_3 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->obtain_full_mean_cov(__pyx_v_self, __pyx_v_x0, __pyx_v_Tf, __pyx_v_Nf, 0, &__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3693, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
      PyObject* sequence = __pyx_t_3;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 3693, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_6 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_5);
      #else
      __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3693, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3693, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3693, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
      index = 0; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_6);
      index = 1; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 3693, __pyx_L1_error)
      __pyx_t_8 = NULL;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L7_unpacking_done;
      __pyx_L6_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_8 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 3693, __pyx_L1_error)
      __pyx_L7_unpacking_done:;
    }
    __pyx_v_xm = __pyx_t_6;
    __pyx_t_6 = 0;
    __pyx_v_full_cov = __pyx_t_5;
    __pyx_t_5 = 0;
  }
  __pyx_L3:;
+3694:         known_spaces = np.empty((Nf-1, dim), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3694, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3694, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyInt_FromSsize_t((__pyx_v_Nf - 1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3694, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3694, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3694, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
  __pyx_t_3 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3694, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);
  __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3694, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3694, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 3694, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3694, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_known_spaces = __pyx_t_3;
  __pyx_t_3 = 0;
+3695:         null_spaces = []
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3695, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_null_spaces = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+3696:         full_fltrs = []
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3696, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_full_fltrs = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
 3697: 
+3698:         for i in range(Nf-1):
  __pyx_t_1 = (__pyx_v_Nf - 1);
  __pyx_t_10 = __pyx_t_1;
  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
    __pyx_v_i = __pyx_t_11;
+3699:             null_space, known_spaces[i] = self._split_spaces(fltr[i], obs[i])
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_split_spaces); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3699, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = __Pyx_GetItemInt(((PyObject *)__pyx_v_fltr), __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3699, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_GetItemInt(((PyObject *)__pyx_v_obs), __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3699, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_12 = NULL;
    __pyx_t_13 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_13 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_7)) {
      PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_t_6, __pyx_t_5};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3699, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
      PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_t_6, __pyx_t_5};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3699, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    {
      __pyx_t_14 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3699, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      if (__pyx_t_12) {
        __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_12); __pyx_t_12 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_13, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_13, __pyx_t_5);
      __pyx_t_6 = 0;
      __pyx_t_5 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_14, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3699, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    }
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
      PyObject* sequence = __pyx_t_3;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 3699, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_14 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_7 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_14 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_14);
      #else
      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3699, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_14 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3699, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      #endif
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_5 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3699, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_8 = Py_TYPE(__pyx_t_5)->tp_iternext;
      index = 0; __pyx_t_7 = __pyx_t_8(__pyx_t_5); if (unlikely(!__pyx_t_7)) goto __pyx_L10_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_7);
      index = 1; __pyx_t_14 = __pyx_t_8(__pyx_t_5); if (unlikely(!__pyx_t_14)) goto __pyx_L10_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_14);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_5), 2) < 0) __PYX_ERR(0, 3699, __pyx_L1_error)
      __pyx_t_8 = NULL;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L11_unpacking_done;
      __pyx_L10_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_8 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 3699, __pyx_L1_error)
      __pyx_L11_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_null_space, __pyx_t_7);
    __pyx_t_7 = 0;
    if (unlikely(__Pyx_SetItemInt(__pyx_v_known_spaces, __pyx_v_i, __pyx_t_14, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0)) __PYX_ERR(0, 3699, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+3700:             null_spaces.append(null_space)
    __pyx_t_15 = __Pyx_PyList_Append(__pyx_v_null_spaces, __pyx_v_null_space); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 3700, __pyx_L1_error)
+3701:             full_fltrs.append(fltr[i])
    __pyx_t_3 = __Pyx_GetItemInt(((PyObject *)__pyx_v_fltr), __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3701, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_15 = __Pyx_PyList_Append(__pyx_v_full_fltrs, __pyx_t_3); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 3701, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
 3702: 
+3703:         full_fltr_mat = sparse.block_diag(full_fltrs)
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_sparse); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3703, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_block_diag); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3703, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
    }
  }
  __pyx_t_3 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_14, __pyx_v_full_fltrs) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_full_fltrs);
  __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3703, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_full_fltr_mat = __pyx_t_3;
  __pyx_t_3 = 0;
+3704:         full_null_space = sparse.block_diag(null_spaces)
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_sparse); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_block_diag); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_14);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_14, function);
    }
  }
  __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_7, __pyx_v_null_spaces) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_v_null_spaces);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_v_full_null_space = __pyx_t_3;
  __pyx_t_3 = 0;
 3705: 
+3706:         full_cov11 = full_null_space@full_cov@(full_null_space.T)
  __pyx_t_3 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_full_null_space, __pyx_v_full_cov); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3706, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_full_null_space, __pyx_n_s_T); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3706, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_7 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_3, __pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3706, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_v_full_cov11 = __pyx_t_7;
  __pyx_t_7 = 0;
+3707:         full_cov12 = full_null_space@full_cov@(full_fltr_mat.T)
  __pyx_t_7 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_full_null_space, __pyx_v_full_cov); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_full_fltr_mat, __pyx_n_s_T); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_3 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_7, __pyx_t_14); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_v_full_cov12 = __pyx_t_3;
  __pyx_t_3 = 0;
+3708:         full_cov22 = full_fltr_mat@full_cov@(full_fltr_mat.T)
  __pyx_t_3 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_full_fltr_mat, __pyx_v_full_cov); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_full_fltr_mat, __pyx_n_s_T); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_7 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_3, __pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_v_full_cov22 = __pyx_t_7;
  __pyx_t_7 = 0;
 3709: 
+3710:         xm_known  = full_fltr_mat@np.ravel(xm)
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_ravel); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_7 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_14, __pyx_v_xm) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_xm);
  __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
  if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_full_fltr_mat, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_xm_known = __pyx_t_3;
  __pyx_t_3 = 0;
+3711:         xm_null  = full_null_space@np.ravel(xm)
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_ravel); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_14);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_14, function);
    }
  }
  __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_7, __pyx_v_xm) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_v_xm);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_full_null_space, __pyx_t_3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_xm_null = __pyx_t_14;
  __pyx_t_14 = 0;
 3712: 
+3713:         obs_flattened = pyross.utils.process_obs(obs, Nf-1)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyross); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3713, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_utils); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3713, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_process_obs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3713, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyInt_FromSsize_t((__pyx_v_Nf - 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3713, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = NULL;
  __pyx_t_13 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_13 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, ((PyObject *)__pyx_v_obs), __pyx_t_7};
    __pyx_t_14 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3713, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, ((PyObject *)__pyx_v_obs), __pyx_t_7};
    __pyx_t_14 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3713, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3713, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_v_obs));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_obs));
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_13, ((PyObject *)__pyx_v_obs));
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_13, __pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3713, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_obs_flattened = __pyx_t_14;
  __pyx_t_14 = 0;
+3714:         dev=np.subtract(obs_flattened, xm_known)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3714, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_subtract); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3714, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_13 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_13 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_obs_flattened, __pyx_v_xm_known};
    __pyx_t_14 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3714, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_14);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_obs_flattened, __pyx_v_xm_known};
    __pyx_t_14 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3714, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_14);
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3714, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_obs_flattened);
    __Pyx_GIVEREF(__pyx_v_obs_flattened);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_13, __pyx_v_obs_flattened);
    __Pyx_INCREF(__pyx_v_xm_known);
    __Pyx_GIVEREF(__pyx_v_xm_known);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_13, __pyx_v_xm_known);
    __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3714, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_dev = __pyx_t_14;
  __pyx_t_14 = 0;
+3715:         tmp = full_cov12@np.linalg.inv(full_cov22)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_linalg); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_inv); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_14 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_v_full_cov22) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_full_cov22);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_full_cov12, __pyx_t_14); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_v_tmp = __pyx_t_6;
  __pyx_t_6 = 0;
+3716:         cov_red = np.subtract(full_cov11, tmp@(full_cov12.T))
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_subtract); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_full_cov12, __pyx_n_s_T); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_3 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_tmp, __pyx_t_14); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = NULL;
  __pyx_t_13 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_13 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_v_full_cov11, __pyx_t_3};
    __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3716, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_v_full_cov11, __pyx_t_3};
    __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3716, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3716, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_14) {
      __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_14); __pyx_t_14 = NULL;
    }
    __Pyx_INCREF(__pyx_v_full_cov11);
    __Pyx_GIVEREF(__pyx_v_full_cov11);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_13, __pyx_v_full_cov11);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_13, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3716, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_cov_red = __pyx_t_6;
  __pyx_t_6 = 0;
+3717:         xm_red = xm_null + tmp@dev
  __pyx_t_6 = __Pyx_PyNumber_MatrixMultiply(__pyx_v_tmp, __pyx_v_dev); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3717, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyNumber_Add(__pyx_v_xm_null, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3717, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_xm_red = __pyx_t_7;
  __pyx_t_7 = 0;
+3718:         return xm_red, cov_red/self.Omega, full_null_space, known_spaces.flatten()
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_7 = PyFloat_FromDouble(__pyx_v_self->Omega); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3718, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = __Pyx_PyNumber_Divide(__pyx_v_cov_red, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3718, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_known_spaces, __pyx_n_s_flatten); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3718, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_7 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3718, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3718, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_xm_red);
  __Pyx_GIVEREF(__pyx_v_xm_red);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_xm_red);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
  __Pyx_INCREF(__pyx_v_full_null_space);
  __Pyx_GIVEREF(__pyx_v_full_null_space);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_full_null_space);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_7);
  __pyx_t_6 = 0;
  __pyx_t_7 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
 3719: 
+3720:     def _split_spaces(self, fltr, obs):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_133_split_spaces(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_133_split_spaces(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_fltr = 0;
  PyObject *__pyx_v_obs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_split_spaces (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fltr,&__pyx_n_s_obs,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fltr)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_split_spaces", 1, 2, 2, 1); __PYX_ERR(0, 3720, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_split_spaces") < 0)) __PYX_ERR(0, 3720, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_fltr = values[0];
    __pyx_v_obs = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_split_spaces", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3720, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type._split_spaces", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_132_split_spaces(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_fltr, __pyx_v_obs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_132_split_spaces(CYTHON_UNUSED struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_fltr, PyObject *__pyx_v_obs) {
  PyObject *__pyx_v_m = NULL;
  PyObject *__pyx_v_n = NULL;
  PyObject *__pyx_v_r = NULL;
  PyObject *__pyx_v_q = NULL;
  PyObject *__pyx_v_null_space = NULL;
  PyObject *__pyx_v_known_space = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_split_spaces", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pyross.inference.SIR_type._split_spaces", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_m);
  __Pyx_XDECREF(__pyx_v_n);
  __Pyx_XDECREF(__pyx_v_r);
  __Pyx_XDECREF(__pyx_v_q);
  __Pyx_XDECREF(__pyx_v_null_space);
  __Pyx_XDECREF(__pyx_v_known_space);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3721:         m, n = fltr.shape
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_fltr, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3721, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 3721, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3721, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3721, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3721, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 3721, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 3721, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_m = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_n = __pyx_t_3;
  __pyx_t_3 = 0;
+3722:         r, q = rq(fltr)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_rq); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3722, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_fltr) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_fltr);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3722, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 3722, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3722, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3722, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3722, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 3722, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 3722, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  __pyx_v_r = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_q = __pyx_t_2;
  __pyx_t_2 = 0;
+3723:         null_space = q[:n-m]
  __pyx_t_1 = PyNumber_Subtract(__pyx_v_n, __pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3723, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_q, 0, 0, NULL, &__pyx_t_1, NULL, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3723, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_null_space = __pyx_t_2;
  __pyx_t_2 = 0;
+3724:         known_space = (q[n-m:]).T  @ solve_triangular(r[:, n-m:], obs)
  __pyx_t_2 = PyNumber_Subtract(__pyx_v_n, __pyx_v_m); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_v_q, 0, 0, &__pyx_t_2, NULL, NULL, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_T); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_solve_triangular); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyNumber_Subtract(__pyx_v_n, __pyx_v_m); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PySlice_New(__pyx_t_4, Py_None, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_slice_);
  __Pyx_GIVEREF(__pyx_slice_);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_slice_);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_r, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_6, __pyx_v_obs};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3724, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_6, __pyx_v_obs};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3724, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3724, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_6);
    __Pyx_INCREF(__pyx_v_obs);
    __Pyx_GIVEREF(__pyx_v_obs);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_obs);
    __pyx_t_6 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3724, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_known_space = __pyx_t_3;
  __pyx_t_3 = 0;
+3725:         return null_space, known_space
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3725, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_null_space);
  __Pyx_GIVEREF(__pyx_v_null_space);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_null_space);
  __Pyx_INCREF(__pyx_v_known_space);
  __Pyx_GIVEREF(__pyx_v_known_space);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_known_space);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 3726: 
 3727: 
+3728:     cdef double _obtain_logp_for_traj_tangent(self, double [:, :] x, double Tf):
static double __pyx_f_6pyross_9inference_8SIR_type__obtain_logp_for_traj_tangent(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, __Pyx_memviewslice __pyx_v_x, double __pyx_v_Tf) {
  __Pyx_memviewslice __pyx_v_dx = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_cov = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_xt = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_time_points = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dx_det = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_dt;
  double __pyx_v_logp;
  double __pyx_v_t;
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_Nf;
  PyObject *__pyx_v_dev = NULL;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_obtain_logp_for_traj_tangent", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_WriteUnraisable("pyross.inference.SIR_type._obtain_logp_for_traj_tangent", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_dx, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_cov, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_xt, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_time_points, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dx_det, 1);
  __Pyx_XDECREF(__pyx_v_dev);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3729:         cdef:
 3730:             double [:, :] dx, cov
 3731:             double [:] xt, time_points, dx_det
 3732:             double dt, logp, t
+3733:             Py_ssize_t i, Nf=x.shape[0]
  __pyx_v_Nf = (__pyx_v_x.shape[0]);
+3734:         time_points = np.linspace(0, Tf, Nf)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_linspace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_Tf); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_Nf); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_int_0, __pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3734, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_int_0, __pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3734, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3734, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_GIVEREF(__pyx_int_0);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_int_0);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_t_4);
    __pyx_t_2 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3734, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 3734, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_time_points = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+3735:         dt = time_points[2]
  __pyx_t_9 = 2;
  __pyx_v_dt = (*((double *) ( /* dim=0 */ (__pyx_v_time_points.data + __pyx_t_9 * __pyx_v_time_points.strides[0]) )));
+3736:         dx = np.gradient(x, axis=0)*2
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3736, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_gradient); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3736, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_x, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3736, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3736, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3736, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 3736, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3736, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_Multiply(__pyx_t_4, __pyx_int_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3736, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 3736, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_dx = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
+3737:         logp = 0
  __pyx_v_logp = 0.0;
+3738:         for i in range(1, Nf-1):
  __pyx_t_11 = (__pyx_v_Nf - 1);
  __pyx_t_12 = __pyx_t_11;
  for (__pyx_t_13 = 1; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
    __pyx_v_i = __pyx_t_13;
+3739:             xt = x[i]
    __pyx_t_8.data = __pyx_v_x.data;
    __pyx_t_8.memview = __pyx_v_x.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_8, 0);
    {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_x.strides[0];
        __pyx_t_8.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_8.shape[0] = __pyx_v_x.shape[1];
__pyx_t_8.strides[0] = __pyx_v_x.strides[1];
    __pyx_t_8.suboffsets[0] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_v_xt, 1);
    __pyx_v_xt = __pyx_t_8;
    __pyx_t_8.memview = NULL;
    __pyx_t_8.data = NULL;
+3740:             t = time_points[i]
    __pyx_t_9 = __pyx_v_i;
    __pyx_v_t = (*((double *) ( /* dim=0 */ (__pyx_v_time_points.data + __pyx_t_9 * __pyx_v_time_points.strides[0]) )));
+3741:             self.det_model.set_contactMatrix(t, self.contactMatrix)
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_det_model); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3741, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_set_contactMatrix); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3741, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyFloat_FromDouble(__pyx_v_t); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3741, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_7)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_4, __pyx_v_self->contactMatrix};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3741, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_4, __pyx_v_self->contactMatrix};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3741, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_2 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3741, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (__pyx_t_3) {
        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __pyx_t_3 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_6, __pyx_t_4);
      __Pyx_INCREF(__pyx_v_self->contactMatrix);
      __Pyx_GIVEREF(__pyx_v_self->contactMatrix);
      PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_6, __pyx_v_self->contactMatrix);
      __pyx_t_4 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3741, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3742:             self.det_model.rhs(np.multiply(xt, self.Omega), t)
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_det_model); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_rhs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_multiply); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_xt, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyFloat_FromDouble(__pyx_v_self->Omega); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_14 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_4, __pyx_t_5};
      __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3742, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_4, __pyx_t_5};
      __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3742, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    {
      __pyx_t_15 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3742, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      if (__pyx_t_14) {
        __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_14); __pyx_t_14 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_6, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_6, __pyx_t_5);
      __pyx_t_4 = 0;
      __pyx_t_5 = 0;
      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_15, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3742, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyFloat_FromDouble(__pyx_v_t); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_15 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_15)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_15);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_15, __pyx_t_7, __pyx_t_3};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3742, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_15, __pyx_t_7, __pyx_t_3};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3742, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    {
      __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3742, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__pyx_t_15) {
        __Pyx_GIVEREF(__pyx_t_15); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_15); __pyx_t_15 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_6, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_t_3);
      __pyx_t_7 = 0;
      __pyx_t_3 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3742, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3743:             dx_det = np.multiply(dt/self.Omega, self.det_model.dxdt)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3743, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_multiply); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3743, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyFloat_FromDouble((__pyx_v_dt / __pyx_v_self->Omega)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3743, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_det_model); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3743, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_dxdt); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3743, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_2, __pyx_t_7};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3743, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_2, __pyx_t_7};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3743, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    {
      __pyx_t_15 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3743, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      if (__pyx_t_3) {
        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_3); __pyx_t_3 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_6, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_6, __pyx_t_7);
      __pyx_t_2 = 0;
      __pyx_t_7 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_15, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3743, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 3743, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_dx_det, 1);
    __pyx_v_dx_det = __pyx_t_8;
    __pyx_t_8.memview = NULL;
    __pyx_t_8.data = NULL;
+3744:             self.compute_jacobian_and_b_matrix(xt, t)
    __pyx_t_1 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->compute_jacobian_and_b_matrix(__pyx_v_self, __pyx_v_xt, __pyx_v_t, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3744, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3745:             cov = np.multiply(dt, self.convert_vec_to_mat(self.B_vec))
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3745, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_multiply); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3745, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyFloat_FromDouble(__pyx_v_dt); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3745, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->B_vec), PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 3745, __pyx_L1_error)
    __pyx_t_7 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->convert_vec_to_mat(__pyx_v_self, __pyx_t_8, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3745, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
    __pyx_t_8.memview = NULL;
    __pyx_t_8.data = NULL;
    __pyx_t_2 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_15);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_15, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_15)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_5, __pyx_t_7};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3745, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_5, __pyx_t_7};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3745, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    {
      __pyx_t_3 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3745, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_6, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_6, __pyx_t_7);
      __pyx_t_5 = 0;
      __pyx_t_7 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3745, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 3745, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_cov, 1);
    __pyx_v_cov = __pyx_t_10;
    __pyx_t_10.memview = NULL;
    __pyx_t_10.data = NULL;
+3746:             dev = np.subtract(dx[i], dx_det)
    __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3746, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_subtract); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3746, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_8.data = __pyx_v_dx.data;
    __pyx_t_8.memview = __pyx_v_dx.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_8, 0);
    {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_dx.strides[0];
        __pyx_t_8.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_8.shape[0] = __pyx_v_dx.shape[1];
__pyx_t_8.strides[0] = __pyx_v_dx.strides[1];
    __pyx_t_8.suboffsets[0] = -1;

__pyx_t_15 = __pyx_memoryview_fromslice(__pyx_t_8, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3746, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
    __pyx_t_8.memview = NULL;
    __pyx_t_8.data = NULL;
    __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_v_dx_det, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3746, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_15, __pyx_t_7};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3746, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_15, __pyx_t_7};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3746, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    {
      __pyx_t_2 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3746, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_15);
      PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_6, __pyx_t_15);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_6, __pyx_t_7);
      __pyx_t_15 = 0;
      __pyx_t_7 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3746, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF_SET(__pyx_v_dev, __pyx_t_1);
    __pyx_t_1 = 0;
+3747:             logp += self._log_cond_p(dev, cov)
    __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_dev, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 3747, __pyx_L1_error)
    __pyx_v_logp = (__pyx_v_logp + ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->_log_cond_p(__pyx_v_self, __pyx_t_8, __pyx_v_cov));
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
    __pyx_t_8.memview = NULL;
    __pyx_t_8.data = NULL;
  }
+3748:         return -logp
  __pyx_r = (-__pyx_v_logp);
  goto __pyx_L0;
 3749: 
+3750:     cdef double _log_cond_p(self, double [:] x, double [:, :] cov):
static double __pyx_f_6pyross_9inference_8SIR_type__log_cond_p(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, __Pyx_memviewslice __pyx_v_x, __Pyx_memviewslice __pyx_v_cov) {
  __Pyx_memviewslice __pyx_v_invcov_x = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_log_cond_p;
  PyObject *__pyx_v_ldet = NULL;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_log_cond_p", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_WriteUnraisable("pyross.inference.SIR_type._log_cond_p", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_invcov_x, 1);
  __Pyx_XDECREF(__pyx_v_ldet);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3751:         cdef:
 3752:             double [:] invcov_x
 3753:             double log_cond_p
 3754:             double det
+3755:         invcov_x, ldet = pyross.utils.solve_symmetric_close_to_singular(cov, x)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3755, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3755, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_solve_symmetric_close_to_singula); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3755, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_cov, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3755, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_x, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3755, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_3, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3755, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_3, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3755, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3755, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_4);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3755, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 3755, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_7 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_7);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3755, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3755, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3755, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_8 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_7 = __pyx_t_8(__pyx_t_4); if (unlikely(!__pyx_t_7)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_7);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_4), 2) < 0) __PYX_ERR(0, 3755, __pyx_L1_error)
    __pyx_t_8 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_8 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 3755, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 3755, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_invcov_x = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
  __pyx_v_ldet = __pyx_t_7;
  __pyx_t_7 = 0;
+3756:         log_cond_p = - np.dot(x, invcov_x)*(self.Omega/2) - (self.dim/2)*log(2*PI)
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_dot); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_v_x, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_invcov_x, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_7, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3756, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_7, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3756, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3756, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_6, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_t_4);
    __pyx_t_7 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3756, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Negative(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->Omega / 2.0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = PyNumber_Multiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyFloat_FromDouble(((__pyx_v_self->dim / 2) * log((2.0 * __pyx_v_6pyross_9inference_PI)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyNumber_Subtract(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3756, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_log_cond_p = __pyx_t_10;
+3757:         log_cond_p -= (ldet - self.dim*log(self.Omega))/2
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_log_cond_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3757, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->dim * log(__pyx_v_self->Omega))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3757, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = PyNumber_Subtract(__pyx_v_ldet, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3757, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_TrueDivideObjC(__pyx_t_5, __pyx_int_2, 2, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3757, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_InPlaceSubtract(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3757, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3757, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_log_cond_p = __pyx_t_10;
+3758:         log_cond_p -= self.dim*np.log(self.Omega)
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_log_cond_p); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_log); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_self->Omega); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_InPlaceSubtract(__pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3758, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_log_cond_p = __pyx_t_10;
+3759:         return log_cond_p
  __pyx_r = __pyx_v_log_cond_p;
  goto __pyx_L0;
 3760: 
+3761:     cdef _estimate_cond_cov(self, object sol, double t1, double t2):
static PyObject *__pyx_f_6pyross_9inference_8SIR_type__estimate_cond_cov(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_sol, double __pyx_v_t1, double __pyx_v_t2) {
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_5__estimate_cond_cov *__pyx_cur_scope;
  __Pyx_memviewslice __pyx_v_cov_vec = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_sigma0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_cov = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_rhs = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_estimate_cond_cov", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pyross_9inference___pyx_scope_struct_5__estimate_cond_cov *)__pyx_tp_new_6pyross_9inference___pyx_scope_struct_5__estimate_cond_cov(__pyx_ptype_6pyross_9inference___pyx_scope_struct_5__estimate_cond_cov, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pyross_9inference___pyx_scope_struct_5__estimate_cond_cov *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 3761, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_sol = __pyx_v_sol;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_sol);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_sol);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
  __Pyx_AddTraceback("pyross.inference.SIR_type._estimate_cond_cov", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_cov_vec, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_sigma0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_cov, 1);
  __Pyx_XDECREF(__pyx_v_rhs);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_obj_6pyross_9inference___pyx_scope_struct_5__estimate_cond_cov {
  PyObject_HEAD
  struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self;
  PyObject *__pyx_v_sol;
};

 3762:         cdef:
+3763:             double [:] cov_vec, sigma0=np.zeros((self.vec_size), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3763, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3763, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_cur_scope->__pyx_v_self->vec_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3763, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3763, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3763, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3763, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 3763, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3763, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3763, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_sigma0 = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
 3764:             double [:, :] cov
 3765: 
+3766:         def rhs(t, sig):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_18_estimate_cond_cov_1rhs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6pyross_9inference_8SIR_type_18_estimate_cond_cov_1rhs = {"rhs", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6pyross_9inference_8SIR_type_18_estimate_cond_cov_1rhs, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_18_estimate_cond_cov_1rhs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_t = 0;
  PyObject *__pyx_v_sig = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rhs (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t,&__pyx_n_s_sig,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sig)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("rhs", 1, 2, 2, 1); __PYX_ERR(0, 3766, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rhs") < 0)) __PYX_ERR(0, 3766, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_t = values[0];
    __pyx_v_sig = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rhs", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3766, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type._estimate_cond_cov.rhs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_18_estimate_cond_cov_rhs(__pyx_self, __pyx_v_t, __pyx_v_sig);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_18_estimate_cond_cov_rhs(PyObject *__pyx_self, PyObject *__pyx_v_t, PyObject *__pyx_v_sig) {
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_5__estimate_cond_cov *__pyx_cur_scope;
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_5__estimate_cond_cov *__pyx_outer_scope;
  PyObject *__pyx_v_x = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rhs", 0);
  __pyx_outer_scope = (struct __pyx_obj_6pyross_9inference___pyx_scope_struct_5__estimate_cond_cov *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_AddTraceback("pyross.inference.SIR_type._estimate_cond_cov.rhs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_x);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__33 = PyTuple_Pack(3, __pyx_n_s_t, __pyx_n_s_sig, __pyx_n_s_x); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 3766, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__33);
  __Pyx_GIVEREF(__pyx_tuple__33);
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6pyross_9inference_8SIR_type_18_estimate_cond_cov_1rhs, 0, __pyx_n_s_SIR_type__estimate_cond_cov_loca, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pyross_inference, __pyx_d, ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3766, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_rhs = __pyx_t_4;
  __pyx_t_4 = 0;
  __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyross_inference_pyx, __pyx_n_s_rhs, 3766, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 3766, __pyx_L1_error)
+3767:             x = sol(t)/self.Omega # sol is an ODESolver obj for extensive variables
  if (unlikely(!__pyx_cur_scope->__pyx_v_sol)) { __Pyx_RaiseClosureNameError("sol"); __PYX_ERR(0, 3767, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_sol);
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_sol; __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_t) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_t);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3767, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3767, __pyx_L1_error) }
  __pyx_t_2 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_self->Omega); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3767, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3767, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_x = __pyx_t_3;
  __pyx_t_3 = 0;
+3768:             self.compute_jacobian_and_b_matrix(x, t, b_matrix=True, jacobian=True)
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3768, __pyx_L1_error) }
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_x, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 3768, __pyx_L1_error)
  __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_v_t); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3768, __pyx_L1_error)
  __pyx_t_6.__pyx_n = 2;
  __pyx_t_6.b_matrix = Py_True;
  __pyx_t_6.jacobian = Py_True;
  __pyx_t_3 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_cur_scope->__pyx_v_self->__pyx_vtab)->compute_jacobian_and_b_matrix(__pyx_cur_scope->__pyx_v_self, __pyx_t_4, __pyx_t_5, &__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3768, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3769:             self._compute_dsigdt(sig)
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3769, __pyx_L1_error) }
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_sig, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 3769, __pyx_L1_error)
  __pyx_t_3 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_cur_scope->__pyx_v_self->__pyx_vtab)->_compute_dsigdt(__pyx_cur_scope->__pyx_v_self, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3770:             self.integrator_step_count += 1
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3770, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3770, __pyx_L1_error) }
  __pyx_cur_scope->__pyx_v_self->integrator_step_count = (__pyx_cur_scope->__pyx_v_self->integrator_step_count + 1);
+3771:             if self.max_steps_lyapunov != 0 and self.integrator_step_count > self.max_steps_lyapunov:
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3771, __pyx_L1_error) }
  __pyx_t_8 = ((__pyx_cur_scope->__pyx_v_self->max_steps_lyapunov != 0) != 0);
  if (__pyx_t_8) {
  } else {
    __pyx_t_7 = __pyx_t_8;
    goto __pyx_L4_bool_binop_done;
  }
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3771, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3771, __pyx_L1_error) }
  __pyx_t_8 = ((__pyx_cur_scope->__pyx_v_self->integrator_step_count > __pyx_cur_scope->__pyx_v_self->max_steps_lyapunov) != 0);
  __pyx_t_7 = __pyx_t_8;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+3772:                 raise MaxIntegratorStepsException()
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_MaxIntegratorStepsException); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3772, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3772, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 3772, __pyx_L1_error)
+3773:             return self.dsigmadt
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3773, __pyx_L1_error) }
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_v_self->dsigmadt));
  __pyx_r = ((PyObject *)__pyx_cur_scope->__pyx_v_self->dsigmadt);
  goto __pyx_L0;
 3774: 
+3775:         cov_vec = self._solve_lyapunov_type_eq(rhs, sigma0, t1, t2, self.steps)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_solve_lyapunov_type_eq); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_sigma0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_t1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_t2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyInt_FromSsize_t(__pyx_cur_scope->__pyx_v_self->steps); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[6] = {__pyx_t_8, __pyx_v_rhs, __pyx_t_3, __pyx_t_2, __pyx_t_6, __pyx_t_7};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_9, 5+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3775, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[6] = {__pyx_t_8, __pyx_v_rhs, __pyx_t_3, __pyx_t_2, __pyx_t_6, __pyx_t_7};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_9, 5+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3775, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else
  #endif
  {
    __pyx_t_10 = PyTuple_New(5+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3775, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__pyx_t_8) {
      __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
    }
    __Pyx_INCREF(__pyx_v_rhs);
    __Pyx_GIVEREF(__pyx_v_rhs);
    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_v_rhs);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_10, 3+__pyx_t_9, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_10, 4+__pyx_t_9, __pyx_t_7);
    __pyx_t_3 = 0;
    __pyx_t_2 = 0;
    __pyx_t_6 = 0;
    __pyx_t_7 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_10, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3775, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 3775, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_cov_vec = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+3776:         cov = self.convert_vec_to_mat(cov_vec)
  __pyx_t_4 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_cur_scope->__pyx_v_self->__pyx_vtab)->convert_vec_to_mat(__pyx_cur_scope->__pyx_v_self, __pyx_v_cov_vec, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3776, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 3776, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_cov = __pyx_t_11;
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
+3777:         return cov
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_cov, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3777, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 3778: 
+3779:     cpdef obtain_full_mean_cov(self, double [:] x0, double Tf, Py_ssize_t Nf, Py_ssize_t inter_steps=0):
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_135obtain_full_mean_cov(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6pyross_9inference_8SIR_type_obtain_full_mean_cov(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, __Pyx_memviewslice __pyx_v_x0, double __pyx_v_Tf, Py_ssize_t __pyx_v_Nf, int __pyx_skip_dispatch, struct __pyx_opt_args_6pyross_9inference_8SIR_type_obtain_full_mean_cov *__pyx_optional_args) {
  Py_ssize_t __pyx_v_inter_steps = ((Py_ssize_t)0);
  Py_ssize_t __pyx_v_dim;
  Py_ssize_t __pyx_v_i;
  __Pyx_memviewslice __pyx_v_xm = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v__xm = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_time_points = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_cond_cov = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_cov = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_temp = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_full_cov = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_ti;
  double __pyx_v_tf;
  PyObject *__pyx_v_times = NULL;
  PyObject *__pyx_v_sol = NULL;
  Py_ssize_t __pyx_v_j;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("obtain_full_mean_cov", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_inter_steps = __pyx_optional_args->inter_steps;
    }
  }
  __PYX_INC_MEMVIEW(&__pyx_v_x0, 1);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_obtain_full_mean_cov); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_6pyross_9inference_8SIR_type_135obtain_full_mean_cov)) {
        __Pyx_XDECREF(__pyx_r);
        if (unlikely(!__pyx_v_x0.memview)) { __Pyx_RaiseUnboundLocalError("x0"); __PYX_ERR(0, 3779, __pyx_L1_error) }
        __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_x0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3779, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = PyFloat_FromDouble(__pyx_v_Tf); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3779, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_Nf); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3779, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_inter_steps); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3779, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_7 = __pyx_t_1; __pyx_t_8 = NULL;
        __pyx_t_9 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_8)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
            __pyx_t_9 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_7)) {
          PyObject *__pyx_temp[5] = {__pyx_t_8, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 4+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3779, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
          PyObject *__pyx_temp[5] = {__pyx_t_8, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 4+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3779, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        } else
        #endif
        {
          __pyx_t_10 = PyTuple_New(4+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3779, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          if (__pyx_t_8) {
            __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
          }
          __Pyx_GIVEREF(__pyx_t_3);
          PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_3);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_5);
          PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_5);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_10, 3+__pyx_t_9, __pyx_t_6);
          __pyx_t_3 = 0;
          __pyx_t_4 = 0;
          __pyx_t_5 = 0;
          __pyx_t_6 = 0;
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3779, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_19, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_24, 1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.obtain_full_mean_cov", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_xm, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v__xm, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_time_points, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_cond_cov, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_cov, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_temp, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_full_cov, 1);
  __Pyx_XDECREF(__pyx_v_times);
  __Pyx_XDECREF(__pyx_v_sol);
  __PYX_XDEC_MEMVIEW(&__pyx_v_x0, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_135obtain_full_mean_cov(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_135obtain_full_mean_cov(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_x0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_Tf;
  Py_ssize_t __pyx_v_Nf;
  Py_ssize_t __pyx_v_inter_steps;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("obtain_full_mean_cov (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x0,&__pyx_n_s_Tf,&__pyx_n_s_Nf,&__pyx_n_s_inter_steps,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x0)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("obtain_full_mean_cov", 0, 3, 4, 1); __PYX_ERR(0, 3779, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Nf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("obtain_full_mean_cov", 0, 3, 4, 2); __PYX_ERR(0, 3779, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "obtain_full_mean_cov") < 0)) __PYX_ERR(0, 3779, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_x0 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_x0.memview)) __PYX_ERR(0, 3779, __pyx_L3_error)
    __pyx_v_Tf = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Tf == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3779, __pyx_L3_error)
    __pyx_v_Nf = __Pyx_PyIndex_AsSsize_t(values[2]); if (unlikely((__pyx_v_Nf == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 3779, __pyx_L3_error)
    if (values[3]) {
      __pyx_v_inter_steps = __Pyx_PyIndex_AsSsize_t(values[3]); if (unlikely((__pyx_v_inter_steps == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 3779, __pyx_L3_error)
    } else {
      __pyx_v_inter_steps = ((Py_ssize_t)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("obtain_full_mean_cov", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3779, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.obtain_full_mean_cov", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_134obtain_full_mean_cov(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_x0, __pyx_v_Tf, __pyx_v_Nf, __pyx_v_inter_steps);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_134obtain_full_mean_cov(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, __Pyx_memviewslice __pyx_v_x0, double __pyx_v_Tf, Py_ssize_t __pyx_v_Nf, Py_ssize_t __pyx_v_inter_steps) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("obtain_full_mean_cov", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_x0.memview)) { __Pyx_RaiseUnboundLocalError("x0"); __PYX_ERR(0, 3779, __pyx_L1_error) }
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.inter_steps = __pyx_v_inter_steps;
  __pyx_t_1 = __pyx_vtabptr_6pyross_9inference_SIR_type->obtain_full_mean_cov(__pyx_v_self, __pyx_v_x0, __pyx_v_Tf, __pyx_v_Nf, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3779, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.obtain_full_mean_cov", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_x0, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_6pyross_9inference_8SIR_type_obtain_full_mean_cov {
  int __pyx_n;
  Py_ssize_t inter_steps;
};
 3780:         cdef:
+3781:             Py_ssize_t dim=self.dim, i
  __pyx_t_11 = __pyx_v_self->dim;
  __pyx_v_dim = __pyx_t_11;
+3782:             double [:, :] xm=np.empty((Nf, dim), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_Nf); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_7);
  __pyx_t_1 = 0;
  __pyx_t_7 = 0;
  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_10);
  __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 3782, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3782, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_xm = __pyx_t_12;
  __pyx_t_12.memview = NULL;
  __pyx_t_12.data = NULL;
+3783:             double [:, :] _xm=np.empty((inter_steps*Nf, dim), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_inter_steps * __pyx_v_Nf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_7);
  __pyx_t_1 = 0;
  __pyx_t_7 = 0;
  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 3783, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3783, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v__xm = __pyx_t_12;
  __pyx_t_12.memview = NULL;
  __pyx_t_12.data = NULL;
+3784:             double [:] time_points=np.linspace(0, Tf, Nf)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_linspace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_Tf); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = PyInt_FromSsize_t(__pyx_v_Nf); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_6 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_int_0, __pyx_t_2, __pyx_t_10};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3784, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_int_0, __pyx_t_2, __pyx_t_10};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3784, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3784, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_GIVEREF(__pyx_int_0);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_9, __pyx_int_0);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_9, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_9, __pyx_t_10);
    __pyx_t_2 = 0;
    __pyx_t_10 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3784, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 3784, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_time_points = __pyx_t_13;
  __pyx_t_13.memview = NULL;
  __pyx_t_13.data = NULL;
 3785:             double [:] xi, xf
 3786:             double [:, :] cond_cov, cov, temp
 3787:             double [:, :, :, :] full_cov
 3788:             double ti, tf
+3789:         if inter_steps:
  __pyx_t_14 = (__pyx_v_inter_steps != 0);
  if (__pyx_t_14) {
/* … */
    goto __pyx_L3;
  }
+3790:             x0 = np.multiply(x0, self.Omega)
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3790, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_multiply); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3790, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_v_x0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3790, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_10 = PyFloat_FromDouble(__pyx_v_self->Omega); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3790, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_2 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_7, __pyx_t_10};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3790, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_7, __pyx_t_10};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3790, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3790, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_9, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_9, __pyx_t_10);
      __pyx_t_7 = 0;
      __pyx_t_10 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3790, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 3790, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_x0, 1);
    __pyx_v_x0 = __pyx_t_13;
    __pyx_t_13.memview = NULL;
    __pyx_t_13.data = NULL;
+3791:             _xm = pyross.utils.forward_euler_integration(self._rhs0, x0,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyross); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3791, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_utils); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3791, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_forward_euler_integration); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3791, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_rhs0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3791, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_10 = __pyx_memoryview_fromslice(__pyx_v_x0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3791, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
/* … */
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3791, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v__xm, 1);
    __pyx_v__xm = __pyx_t_12;
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
+3792:                                                                 0, Tf,
    __pyx_t_7 = PyFloat_FromDouble(__pyx_v_Tf); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3792, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
+3793:                                                                 Nf, inter_steps)
    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_Nf); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3793, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_inter_steps); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3793, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[7] = {__pyx_t_3, __pyx_t_6, __pyx_t_10, __pyx_int_0, __pyx_t_7, __pyx_t_2, __pyx_t_4};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 6+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3791, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[7] = {__pyx_t_3, __pyx_t_6, __pyx_t_10, __pyx_int_0, __pyx_t_7, __pyx_t_2, __pyx_t_4};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 6+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3791, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_8 = PyTuple_New(6+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3791, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (__pyx_t_3) {
        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3); __pyx_t_3 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_9, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_9, __pyx_t_10);
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_9, __pyx_int_0);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_8, 3+__pyx_t_9, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_8, 4+__pyx_t_9, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_8, 5+__pyx_t_9, __pyx_t_4);
      __pyx_t_6 = 0;
      __pyx_t_10 = 0;
      __pyx_t_7 = 0;
      __pyx_t_2 = 0;
      __pyx_t_4 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3791, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+3794:             _xm = np.divide(_xm, self.Omega)
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3794, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_divide); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3794, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v__xm, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3794, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PyFloat_FromDouble(__pyx_v_self->Omega); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3794, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_5, __pyx_t_4};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3794, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_5, __pyx_t_4};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3794, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_7 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3794, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_9, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_9, __pyx_t_4);
      __pyx_t_5 = 0;
      __pyx_t_4 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3794, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3794, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v__xm, 1);
    __pyx_v__xm = __pyx_t_12;
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
+3795:             self._xm = np.copy(_xm)
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3795, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_copy); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3795, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __pyx_memoryview_fromslice(__pyx_v__xm, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3795, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_4, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3795, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3795, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_GOTREF(__pyx_v_self->_xm);
    __Pyx_DECREF(((PyObject *)__pyx_v_self->_xm));
    __pyx_v_self->_xm = ((PyArrayObject *)__pyx_t_1);
    __pyx_t_1 = 0;
+3796:             self._interp = []
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3796, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_GOTREF(__pyx_v_self->_interp);
    __Pyx_DECREF(__pyx_v_self->_interp);
    __pyx_v_self->_interp = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
+3797:             times = np.linspace(0, Nf, inter_steps*Nf)
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3797, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_linspace); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3797, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_Nf); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3797, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_4 = PyInt_FromSsize_t((__pyx_v_inter_steps * __pyx_v_Nf)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3797, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_int_0, __pyx_t_7, __pyx_t_4};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3797, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_int_0, __pyx_t_7, __pyx_t_4};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3797, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_2 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3797, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_9, __pyx_int_0);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_9, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_2, 2+__pyx_t_9, __pyx_t_4);
      __pyx_t_7 = 0;
      __pyx_t_4 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3797, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_v_times = __pyx_t_1;
    __pyx_t_1 = 0;
+3798:             for i in range(dim):
    __pyx_t_11 = __pyx_v_dim;
    __pyx_t_15 = __pyx_t_11;
    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
      __pyx_v_i = __pyx_t_16;
+3799:                 self._interp.append(interpolate.interp1d(times, _xm[:,i],
      if (unlikely(__pyx_v_self->_interp == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
        __PYX_ERR(0, 3799, __pyx_L1_error)
      }
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_interpolate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3799, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_interp1d); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3799, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_13.data = __pyx_v__xm.data;
      __pyx_t_13.memview = __pyx_v__xm.memview;
      __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
      __pyx_t_13.shape[0] = __pyx_v__xm.shape[0];
__pyx_t_13.strides[0] = __pyx_v__xm.strides[0];
    __pyx_t_13.suboffsets[0] = -1;

{
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v__xm.strides[1];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_1 = __pyx_memoryview_fromslice(__pyx_t_13, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3799, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
      __pyx_t_13.memview = NULL;
      __pyx_t_13.data = NULL;
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3799, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_v_times);
      __Pyx_GIVEREF(__pyx_v_times);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_times);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
      __pyx_t_1 = 0;
/* … */
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3799, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_17 = __Pyx_PyList_Append(__pyx_v_self->_interp, __pyx_t_4); if (unlikely(__pyx_t_17 == ((int)-1))) __PYX_ERR(0, 3799, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
+3800:                                                           kind='linear'))
      __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3800, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_kind, __pyx_n_u_linear) < 0) __PYX_ERR(0, 3800, __pyx_L1_error)
+3801:             xm = _xm[::inter_steps]
    __pyx_t_12.data = __pyx_v__xm.data;
    __pyx_t_12.memview = __pyx_v__xm.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_12, 0);
    __pyx_t_9 = -1;
    if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_12,
    __pyx_v__xm.shape[0], __pyx_v__xm.strides[0], __pyx_v__xm.suboffsets[0],
    0,
    0,
    &__pyx_t_9,
    0,
    0,
    __pyx_v_inter_steps,
    0,
    0,
    1,
    1) < 0))
{
    __PYX_ERR(0, 3801, __pyx_L1_error)
}

__pyx_t_12.shape[1] = __pyx_v__xm.shape[1];
__pyx_t_12.strides[1] = __pyx_v__xm.strides[1];
    __pyx_t_12.suboffsets[1] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_v_xm, 1);
    __pyx_v_xm = __pyx_t_12;
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
+3802:             sol = self.interpolate_euler
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_interpolate_euler); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3802, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_sol = __pyx_t_4;
    __pyx_t_4 = 0;
 3803:         else:
+3804:             xm, sol = self.integrate(x0, 0, Tf, Nf, dense_output=True,
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_integrate); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_x0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PyFloat_FromDouble(__pyx_v_Tf); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_Nf); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_GIVEREF(__pyx_int_0);
    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_int_0);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_8);
    __pyx_t_1 = 0;
    __pyx_t_2 = 0;
    __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dense_output, Py_True) < 0) __PYX_ERR(0, 3804, __pyx_L1_error)
/* … */
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
      PyObject* sequence = __pyx_t_2;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 3804, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_8 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_7 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_7);
      #else
      __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3804, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3804, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      #endif
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3804, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_18 = Py_TYPE(__pyx_t_4)->tp_iternext;
      index = 0; __pyx_t_8 = __pyx_t_18(__pyx_t_4); if (unlikely(!__pyx_t_8)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_8);
      index = 1; __pyx_t_7 = __pyx_t_18(__pyx_t_4); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_7);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_18(__pyx_t_4), 2) < 0) __PYX_ERR(0, 3804, __pyx_L1_error)
      __pyx_t_18 = NULL;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L7_unpacking_done;
      __pyx_L6_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_18 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 3804, __pyx_L1_error)
      __pyx_L7_unpacking_done:;
    }
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3804, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_xm, 1);
    __pyx_v_xm = __pyx_t_12;
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
    __pyx_v_sol = __pyx_t_7;
    __pyx_t_7 = 0;
  }
  __pyx_L3:;
+3805:                                            max_step=self.steps*Nf)
    __pyx_t_2 = PyInt_FromSsize_t((__pyx_v_self->steps * __pyx_v_Nf)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3805, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_max_step, __pyx_t_2) < 0) __PYX_ERR(0, 3804, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3806:         cov = np.zeros((dim, dim), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_8);
  __pyx_t_2 = 0;
  __pyx_t_8 = 0;
  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 3806, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3806, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_cov = __pyx_t_12;
  __pyx_t_12.memview = NULL;
  __pyx_t_12.data = NULL;
+3807:         full_cov = np.zeros((Nf-1, dim, Nf-1, dim), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t((__pyx_v_Nf - 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_7 = PyInt_FromSsize_t((__pyx_v_Nf - 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_8 = 0;
  __pyx_t_7 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 3807, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_19 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_19.memview)) __PYX_ERR(0, 3807, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_full_cov = __pyx_t_19;
  __pyx_t_19.memview = NULL;
  __pyx_t_19.data = NULL;
+3808:         self.integrator_step_count = 0
  __pyx_v_self->integrator_step_count = 0;
+3809:         for i in range(Nf-1):
  __pyx_t_11 = (__pyx_v_Nf - 1);
  __pyx_t_15 = __pyx_t_11;
  for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
    __pyx_v_i = __pyx_t_16;
+3810:             ti = time_points[i]
    __pyx_t_20 = __pyx_v_i;
    __pyx_v_ti = (*((double *) ( /* dim=0 */ (__pyx_v_time_points.data + __pyx_t_20 * __pyx_v_time_points.strides[0]) )));
+3811:             tf = time_points[i+1]
    __pyx_t_20 = (__pyx_v_i + 1);
    __pyx_v_tf = (*((double *) ( /* dim=0 */ (__pyx_v_time_points.data + __pyx_t_20 * __pyx_v_time_points.strides[0]) )));
+3812:             cond_cov = self._estimate_cond_cov(sol, ti, tf)
    __pyx_t_7 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->_estimate_cond_cov(__pyx_v_self, __pyx_v_sol, __pyx_v_ti, __pyx_v_tf); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3812, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3812, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_cond_cov, 1);
    __pyx_v_cond_cov = __pyx_t_12;
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
+3813:             self._obtain_time_evol_op(sol, ti, tf)
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_obtain_time_evol_op); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3813, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_ti); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3813, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PyFloat_FromDouble(__pyx_v_tf); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3813, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_v_sol, __pyx_t_1, __pyx_t_4};
      __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3813, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_v_sol, __pyx_t_1, __pyx_t_4};
      __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3813, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_2 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3813, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (__pyx_t_8) {
        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); __pyx_t_8 = NULL;
      }
      __Pyx_INCREF(__pyx_v_sol);
      __Pyx_GIVEREF(__pyx_v_sol);
      PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_9, __pyx_v_sol);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_9, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_2, 2+__pyx_t_9, __pyx_t_4);
      __pyx_t_1 = 0;
      __pyx_t_4 = 0;
      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3813, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+3814:             cov = np.add(self.U@cov@self.U.T, cond_cov)
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_add); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_cov, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = __Pyx_PyNumber_MatrixMultiply(((PyObject *)__pyx_v_self->U), __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->U), __pyx_n_s_T); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_cond_cov, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_1, __pyx_t_5};
      __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3814, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_1, __pyx_t_5};
      __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3814, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    {
      __pyx_t_8 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3814, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_9, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_9, __pyx_t_5);
      __pyx_t_1 = 0;
      __pyx_t_5 = 0;
      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3814, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3814, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_cov, 1);
    __pyx_v_cov = __pyx_t_12;
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
+3815:             full_cov[i, :, i, :] = cov
    __pyx_t_12.data = __pyx_v_full_cov.data;
    __pyx_t_12.memview = __pyx_v_full_cov.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_12, 0);
    {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_full_cov.strides[0];
        __pyx_t_12.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_12.shape[0] = __pyx_v_full_cov.shape[1];
__pyx_t_12.strides[0] = __pyx_v_full_cov.strides[1];
    __pyx_t_12.suboffsets[0] = -1;

{
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_full_cov.strides[2];
        __pyx_t_12.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_12.shape[1] = __pyx_v_full_cov.shape[3];
__pyx_t_12.strides[1] = __pyx_v_full_cov.strides[3];
    __pyx_t_12.suboffsets[1] = -1;

if (unlikely(__pyx_memoryview_copy_contents(__pyx_v_cov, __pyx_t_12, 2, 2, 0) < 0)) __PYX_ERR(0, 3815, __pyx_L1_error)
    __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
+3816:             if i>0:
    __pyx_t_14 = ((__pyx_v_i > 0) != 0);
    if (__pyx_t_14) {
/* … */
    }
  }
+3817:                 for j in range(0, i):
      __pyx_t_21 = __pyx_v_i;
      __pyx_t_22 = __pyx_t_21;
      for (__pyx_t_23 = 0; __pyx_t_23 < __pyx_t_22; __pyx_t_23+=1) {
        __pyx_v_j = __pyx_t_23;
+3818:                     temp = full_cov[j, :, i-1, :]@self.U.T
        __pyx_t_12.data = __pyx_v_full_cov.data;
        __pyx_t_12.memview = __pyx_v_full_cov.memview;
        __PYX_INC_MEMVIEW(&__pyx_t_12, 0);
        {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_j;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_full_cov.strides[0];
        __pyx_t_12.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_12.shape[0] = __pyx_v_full_cov.shape[1];
__pyx_t_12.strides[0] = __pyx_v_full_cov.strides[1];
    __pyx_t_12.suboffsets[0] = -1;

{
    Py_ssize_t __pyx_tmp_idx = (__pyx_v_i - 1);
    Py_ssize_t __pyx_tmp_stride = __pyx_v_full_cov.strides[2];
        __pyx_t_12.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_12.shape[1] = __pyx_v_full_cov.shape[3];
__pyx_t_12.strides[1] = __pyx_v_full_cov.strides[3];
    __pyx_t_12.suboffsets[1] = -1;

__pyx_t_7 = __pyx_memoryview_fromslice(__pyx_t_12, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3818, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
        __pyx_t_12.memview = NULL;
        __pyx_t_12.data = NULL;
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->U), __pyx_n_s_T); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3818, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_8 = __Pyx_PyNumber_MatrixMultiply(__pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3818, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3818, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __PYX_XDEC_MEMVIEW(&__pyx_v_temp, 1);
        __pyx_v_temp = __pyx_t_12;
        __pyx_t_12.memview = NULL;
        __pyx_t_12.data = NULL;
+3819:                     full_cov[j, :, i, :] = temp
        __pyx_t_12.data = __pyx_v_full_cov.data;
        __pyx_t_12.memview = __pyx_v_full_cov.memview;
        __PYX_INC_MEMVIEW(&__pyx_t_12, 0);
        {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_j;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_full_cov.strides[0];
        __pyx_t_12.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_12.shape[0] = __pyx_v_full_cov.shape[1];
__pyx_t_12.strides[0] = __pyx_v_full_cov.strides[1];
    __pyx_t_12.suboffsets[0] = -1;

{
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_full_cov.strides[2];
        __pyx_t_12.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_12.shape[1] = __pyx_v_full_cov.shape[3];
__pyx_t_12.strides[1] = __pyx_v_full_cov.strides[3];
    __pyx_t_12.suboffsets[1] = -1;

if (unlikely(__pyx_memoryview_copy_contents(__pyx_v_temp, __pyx_t_12, 2, 2, 0) < 0)) __PYX_ERR(0, 3819, __pyx_L1_error)
        __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
        __pyx_t_12.memview = NULL;
        __pyx_t_12.data = NULL;
+3820:                     full_cov[i, :, j, :] = temp.T
        __pyx_t_12 = __pyx_v_temp;
        __PYX_INC_MEMVIEW(&__pyx_t_12, 1);
        if (unlikely(__pyx_memslice_transpose(&__pyx_t_12) == 0)) __PYX_ERR(0, 3820, __pyx_L1_error)
        __pyx_t_24.data = __pyx_v_full_cov.data;
        __pyx_t_24.memview = __pyx_v_full_cov.memview;
        __PYX_INC_MEMVIEW(&__pyx_t_24, 0);
        {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_full_cov.strides[0];
        __pyx_t_24.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_24.shape[0] = __pyx_v_full_cov.shape[1];
__pyx_t_24.strides[0] = __pyx_v_full_cov.strides[1];
    __pyx_t_24.suboffsets[0] = -1;

{
    Py_ssize_t __pyx_tmp_idx = __pyx_v_j;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_full_cov.strides[2];
        __pyx_t_24.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_24.shape[1] = __pyx_v_full_cov.shape[3];
__pyx_t_24.strides[1] = __pyx_v_full_cov.strides[3];
    __pyx_t_24.suboffsets[1] = -1;

if (unlikely(__pyx_memoryview_copy_contents(__pyx_t_12, __pyx_t_24, 2, 2, 0) < 0)) __PYX_ERR(0, 3820, __pyx_L1_error)
        __PYX_XDEC_MEMVIEW(&__pyx_t_24, 1);
        __pyx_t_24.memview = NULL;
        __pyx_t_24.data = NULL;
        __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
        __pyx_t_12.memview = NULL;
        __pyx_t_12.data = NULL;
      }
 3821:         # returns mean and cov for all but first (fixed!) time point
+3822:         return xm[1:], np.reshape(full_cov, ((Nf-1)*dim, (Nf-1)*dim))
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_12.data = __pyx_v_xm.data;
  __pyx_t_12.memview = __pyx_v_xm.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_12, 0);
  __pyx_t_9 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_12,
    __pyx_v_xm.shape[0], __pyx_v_xm.strides[0], __pyx_v_xm.suboffsets[0],
    0,
    0,
    &__pyx_t_9,
    1,
    0,
    0,
    1,
    0,
    0,
    1) < 0))
{
    __PYX_ERR(0, 3822, __pyx_L1_error)
}

__pyx_t_12.shape[1] = __pyx_v_xm.shape[1];
__pyx_t_12.strides[1] = __pyx_v_xm.strides[1];
    __pyx_t_12.suboffsets[1] = -1;

__pyx_t_8 = __pyx_memoryview_fromslice(__pyx_t_12, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3822, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
  __pyx_t_12.memview = NULL;
  __pyx_t_12.data = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3822, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_reshape); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3822, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_v_full_cov, 4, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3822, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_1 = PyInt_FromSsize_t(((__pyx_v_Nf - 1) * __pyx_v_dim)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3822, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyInt_FromSsize_t(((__pyx_v_Nf - 1) * __pyx_v_dim)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3822, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3822, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_4);
  __pyx_t_1 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_7, __pyx_t_10};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3822, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_7, __pyx_t_10};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3822, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  {
    __pyx_t_1 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3822, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_9, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_9, __pyx_t_10);
    __pyx_t_7 = 0;
    __pyx_t_10 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3822, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3822, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
  __pyx_t_8 = 0;
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
 3823: 
+3824:     cpdef interpolate_euler(self, t):
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_137interpolate_euler(PyObject *__pyx_v_self, PyObject *__pyx_v_t); /*proto*/
static PyObject *__pyx_f_6pyross_9inference_8SIR_type_interpolate_euler(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_t, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_ip = NULL;
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("interpolate_euler", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_interpolate_euler); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3824, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_6pyross_9inference_8SIR_type_137interpolate_euler)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
          }
        }
        __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_v_t) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_t);
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3824, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type.interpolate_euler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ip);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_137interpolate_euler(PyObject *__pyx_v_self, PyObject *__pyx_v_t); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_137interpolate_euler(PyObject *__pyx_v_self, PyObject *__pyx_v_t) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("interpolate_euler (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_136interpolate_euler(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), ((PyObject *)__pyx_v_t));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_136interpolate_euler(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_t) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("interpolate_euler", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6pyross_9inference_8SIR_type_interpolate_euler(__pyx_v_self, __pyx_v_t, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3824, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.interpolate_euler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3825:         ip = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3825, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_ip = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3826:         for i in range(self.dim):
  __pyx_t_5 = __pyx_v_self->dim;
  __pyx_t_6 = __pyx_t_5;
  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
    __pyx_v_i = __pyx_t_7;
+3827:             ip.append(self._interp[i](t))
    if (unlikely(__pyx_v_self->_interp == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 3827, __pyx_L1_error)
    }
    __Pyx_INCREF(PyList_GET_ITEM(__pyx_v_self->_interp, __pyx_v_i));
    __pyx_t_2 = PyList_GET_ITEM(__pyx_v_self->_interp, __pyx_v_i); __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_t) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_t);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3827, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_ip, __pyx_t_1); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 3827, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
+3828:         return np.asarray(ip).T
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_ip) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_ip);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_T); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 3829: 
+3830:     cpdef obtain_full_mean_cov_tangent_space(self, double [:] x0, double Tf, Py_ssize_t Nf, Py_ssize_t inter_steps=0):
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_139obtain_full_mean_cov_tangent_space(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6pyross_9inference_8SIR_type_obtain_full_mean_cov_tangent_space(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, __Pyx_memviewslice __pyx_v_x0, double __pyx_v_Tf, Py_ssize_t __pyx_v_Nf, int __pyx_skip_dispatch, struct __pyx_opt_args_6pyross_9inference_8SIR_type_obtain_full_mean_cov_tangent_space *__pyx_optional_args) {
  Py_ssize_t __pyx_v_inter_steps = ((Py_ssize_t)0);
  Py_ssize_t __pyx_v_dim;
  Py_ssize_t __pyx_v_i;
  __Pyx_memviewslice __pyx_v_xm = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_time_points = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_xt = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_cov = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_cond_cov = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_U = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_J_dt = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_temp = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_full_cov = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_t;
  double __pyx_v_dt;
  Py_ssize_t __pyx_v_j;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("obtain_full_mean_cov_tangent_space", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_inter_steps = __pyx_optional_args->inter_steps;
    }
  }
  __PYX_INC_MEMVIEW(&__pyx_v_x0, 1);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_obtain_full_mean_cov_tangent_spa); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3830, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_6pyross_9inference_8SIR_type_139obtain_full_mean_cov_tangent_space)) {
        __Pyx_XDECREF(__pyx_r);
        if (unlikely(!__pyx_v_x0.memview)) { __Pyx_RaiseUnboundLocalError("x0"); __PYX_ERR(0, 3830, __pyx_L1_error) }
        __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_x0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3830, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = PyFloat_FromDouble(__pyx_v_Tf); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3830, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_Nf); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3830, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_inter_steps); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3830, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_7 = __pyx_t_1; __pyx_t_8 = NULL;
        __pyx_t_9 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_8)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
            __pyx_t_9 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_7)) {
          PyObject *__pyx_temp[5] = {__pyx_t_8, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 4+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3830, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
          PyObject *__pyx_temp[5] = {__pyx_t_8, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 4+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3830, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        } else
        #endif
        {
          __pyx_t_10 = PyTuple_New(4+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3830, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          if (__pyx_t_8) {
            __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
          }
          __Pyx_GIVEREF(__pyx_t_3);
          PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_3);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_5);
          PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_5);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_10, 3+__pyx_t_9, __pyx_t_6);
          __pyx_t_3 = 0;
          __pyx_t_4 = 0;
          __pyx_t_5 = 0;
          __pyx_t_6 = 0;
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3830, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
  __Pyx_XDECREF(__pyx_t_20);
  __PYX_XDEC_MEMVIEW(&__pyx_t_24, 1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.obtain_full_mean_cov_tangent_space", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_xm, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_time_points, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_xt, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_cov, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_cond_cov, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_U, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_J_dt, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_temp, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_full_cov, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_x0, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_139obtain_full_mean_cov_tangent_space(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_139obtain_full_mean_cov_tangent_space(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_x0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_Tf;
  Py_ssize_t __pyx_v_Nf;
  Py_ssize_t __pyx_v_inter_steps;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("obtain_full_mean_cov_tangent_space (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x0,&__pyx_n_s_Tf,&__pyx_n_s_Nf,&__pyx_n_s_inter_steps,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x0)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Tf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("obtain_full_mean_cov_tangent_space", 0, 3, 4, 1); __PYX_ERR(0, 3830, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Nf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("obtain_full_mean_cov_tangent_space", 0, 3, 4, 2); __PYX_ERR(0, 3830, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter_steps);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "obtain_full_mean_cov_tangent_space") < 0)) __PYX_ERR(0, 3830, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_x0 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_x0.memview)) __PYX_ERR(0, 3830, __pyx_L3_error)
    __pyx_v_Tf = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Tf == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3830, __pyx_L3_error)
    __pyx_v_Nf = __Pyx_PyIndex_AsSsize_t(values[2]); if (unlikely((__pyx_v_Nf == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 3830, __pyx_L3_error)
    if (values[3]) {
      __pyx_v_inter_steps = __Pyx_PyIndex_AsSsize_t(values[3]); if (unlikely((__pyx_v_inter_steps == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 3830, __pyx_L3_error)
    } else {
      __pyx_v_inter_steps = ((Py_ssize_t)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("obtain_full_mean_cov_tangent_space", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3830, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.obtain_full_mean_cov_tangent_space", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_138obtain_full_mean_cov_tangent_space(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_x0, __pyx_v_Tf, __pyx_v_Nf, __pyx_v_inter_steps);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_138obtain_full_mean_cov_tangent_space(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, __Pyx_memviewslice __pyx_v_x0, double __pyx_v_Tf, Py_ssize_t __pyx_v_Nf, Py_ssize_t __pyx_v_inter_steps) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("obtain_full_mean_cov_tangent_space", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_x0.memview)) { __Pyx_RaiseUnboundLocalError("x0"); __PYX_ERR(0, 3830, __pyx_L1_error) }
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.inter_steps = __pyx_v_inter_steps;
  __pyx_t_1 = __pyx_vtabptr_6pyross_9inference_SIR_type->obtain_full_mean_cov_tangent_space(__pyx_v_self, __pyx_v_x0, __pyx_v_Tf, __pyx_v_Nf, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3830, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.obtain_full_mean_cov_tangent_space", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_x0, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_6pyross_9inference_8SIR_type_obtain_full_mean_cov_tangent_space {
  int __pyx_n;
  Py_ssize_t inter_steps;
};
 3831:         cdef:
+3832:             Py_ssize_t dim=self.dim, i
  __pyx_t_11 = __pyx_v_self->dim;
  __pyx_v_dim = __pyx_t_11;
+3833:             double [:, :] xm=np.empty((Nf, dim), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_Nf); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_7);
  __pyx_t_1 = 0;
  __pyx_t_7 = 0;
  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_10);
  __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 3833, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3833, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_xm = __pyx_t_12;
  __pyx_t_12.memview = NULL;
  __pyx_t_12.data = NULL;
+3834:             double [:] time_points=np.linspace(0, Tf, Nf)
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3834, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_linspace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3834, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = PyFloat_FromDouble(__pyx_v_Tf); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3834, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_Nf); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3834, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_int_0, __pyx_t_10, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3834, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_int_0, __pyx_t_10, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3834, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3834, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_GIVEREF(__pyx_int_0);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_9, __pyx_int_0);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_9, __pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_9, __pyx_t_2);
    __pyx_t_10 = 0;
    __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3834, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 3834, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_time_points = __pyx_t_13;
  __pyx_t_13.memview = NULL;
  __pyx_t_13.data = NULL;
 3835:             double [:] xt
 3836:             double [:, :] cov, cond_cov, U, J_dt, temp
 3837:             double [:, :, :, :] full_cov
+3838:             double t, dt=time_points[1]
  __pyx_t_14 = 1;
  __pyx_v_dt = (*((double *) ( /* dim=0 */ (__pyx_v_time_points.data + __pyx_t_14 * __pyx_v_time_points.strides[0]) )));
+3839:         if inter_steps:
  __pyx_t_15 = (__pyx_v_inter_steps != 0);
  if (__pyx_t_15) {
/* … */
    goto __pyx_L3;
  }
+3840:             x0 = np.multiply(x0, self.Omega)
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3840, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_multiply); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3840, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_v_x0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3840, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->Omega); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3840, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_10 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_7, __pyx_t_2};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3840, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_7, __pyx_t_2};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3840, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3840, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_10) {
        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_10); __pyx_t_10 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_9, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_9, __pyx_t_2);
      __pyx_t_7 = 0;
      __pyx_t_2 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3840, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 3840, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_x0, 1);
    __pyx_v_x0 = __pyx_t_13;
    __pyx_t_13.memview = NULL;
    __pyx_t_13.data = NULL;
+3841:             xm = pyross.utils.forward_euler_integration(self._rhs0, x0, 0, Tf,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyross); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3841, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_utils); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3841, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_forward_euler_integration); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3841, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_rhs0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3841, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_x0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3841, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = PyFloat_FromDouble(__pyx_v_Tf); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3841, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
/* … */
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3841, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_xm, 1);
    __pyx_v_xm = __pyx_t_12;
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
+3842:                                                         Nf, inter_steps)
    __pyx_t_10 = PyInt_FromSsize_t(__pyx_v_Nf); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3842, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_inter_steps); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3842, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[7] = {__pyx_t_3, __pyx_t_6, __pyx_t_2, __pyx_int_0, __pyx_t_7, __pyx_t_10, __pyx_t_4};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 6+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3841, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[7] = {__pyx_t_3, __pyx_t_6, __pyx_t_2, __pyx_int_0, __pyx_t_7, __pyx_t_10, __pyx_t_4};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 6+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3841, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_8 = PyTuple_New(6+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3841, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (__pyx_t_3) {
        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3); __pyx_t_3 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_9, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_9, __pyx_t_2);
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_9, __pyx_int_0);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_8, 3+__pyx_t_9, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_8, 4+__pyx_t_9, __pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_8, 5+__pyx_t_9, __pyx_t_4);
      __pyx_t_6 = 0;
      __pyx_t_2 = 0;
      __pyx_t_7 = 0;
      __pyx_t_10 = 0;
      __pyx_t_4 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3841, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+3843:             xm = xm[::inter_steps]
    __pyx_t_12.data = __pyx_v_xm.data;
    __pyx_t_12.memview = __pyx_v_xm.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_12, 0);
    __pyx_t_9 = -1;
    if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_12,
    __pyx_v_xm.shape[0], __pyx_v_xm.strides[0], __pyx_v_xm.suboffsets[0],
    0,
    0,
    &__pyx_t_9,
    0,
    0,
    __pyx_v_inter_steps,
    0,
    0,
    1,
    1) < 0))
{
    __PYX_ERR(0, 3843, __pyx_L1_error)
}

__pyx_t_12.shape[1] = __pyx_v_xm.shape[1];
__pyx_t_12.strides[1] = __pyx_v_xm.strides[1];
    __pyx_t_12.suboffsets[1] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_v_xm, 1);
    __pyx_v_xm = __pyx_t_12;
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
+3844:             xm = np.divide(xm, self.Omega)
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_divide); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_xm, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PyFloat_FromDouble(__pyx_v_self->Omega); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_10 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_5, __pyx_t_4};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3844, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_5, __pyx_t_4};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3844, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_7 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3844, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (__pyx_t_10) {
        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_10); __pyx_t_10 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_9, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_9, __pyx_t_4);
      __pyx_t_5 = 0;
      __pyx_t_4 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3844, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3844, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_xm, 1);
    __pyx_v_xm = __pyx_t_12;
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
 3845:         else:
+3846:             xm = self.integrate(x0, 0, Tf, Nf, max_step=self.steps*Nf)
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_integrate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3846, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = __pyx_memoryview_fromslice(__pyx_v_x0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3846, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = PyFloat_FromDouble(__pyx_v_Tf); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3846, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_Nf); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3846, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3846, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_8);
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_GIVEREF(__pyx_int_0);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_0);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4);
    __pyx_t_8 = 0;
    __pyx_t_7 = 0;
    __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3846, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = PyInt_FromSsize_t((__pyx_v_self->steps * __pyx_v_Nf)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3846, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_max_step, __pyx_t_7) < 0) __PYX_ERR(0, 3846, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3846, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3846, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_xm, 1);
    __pyx_v_xm = __pyx_t_12;
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
  }
  __pyx_L3:;
+3847:         full_cov = np.zeros((Nf-1, dim, Nf-1, dim), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3847, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3847, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyInt_FromSsize_t((__pyx_v_Nf - 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3847, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3847, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_Nf - 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3847, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3847, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_10 = PyTuple_New(4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3847, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_10, 3, __pyx_t_8);
  __pyx_t_7 = 0;
  __pyx_t_5 = 0;
  __pyx_t_1 = 0;
  __pyx_t_8 = 0;
  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3847, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_10);
  __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3847, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3847, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 3847, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_8, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3847, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 3847, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_full_cov = __pyx_t_16;
  __pyx_t_16.memview = NULL;
  __pyx_t_16.data = NULL;
+3848:         cov = np.zeros((dim, dim), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3848, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3848, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3848, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3848, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3848, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_8);
  __pyx_t_1 = 0;
  __pyx_t_8 = 0;
  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3848, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3848, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3848, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 3848, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_8, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3848, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3848, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_cov = __pyx_t_12;
  __pyx_t_12.memview = NULL;
  __pyx_t_12.data = NULL;
+3849:         for i in range(Nf-1):
  __pyx_t_11 = (__pyx_v_Nf - 1);
  __pyx_t_17 = __pyx_t_11;
  for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
    __pyx_v_i = __pyx_t_18;
+3850:             t = time_points[i]
    __pyx_t_14 = __pyx_v_i;
    __pyx_v_t = (*((double *) ( /* dim=0 */ (__pyx_v_time_points.data + __pyx_t_14 * __pyx_v_time_points.strides[0]) )));
+3851:             xt = xm[i]
    __pyx_t_13.data = __pyx_v_xm.data;
    __pyx_t_13.memview = __pyx_v_xm.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
    {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_xm.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_xm.shape[1];
__pyx_t_13.strides[0] = __pyx_v_xm.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_v_xt, 1);
    __pyx_v_xt = __pyx_t_13;
    __pyx_t_13.memview = NULL;
    __pyx_t_13.data = NULL;
+3852:             self.compute_jacobian_and_b_matrix(xt, t, b_matrix=True, jacobian=True)
    __pyx_t_19.__pyx_n = 2;
    __pyx_t_19.b_matrix = Py_True;
    __pyx_t_19.jacobian = Py_True;
    __pyx_t_1 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->compute_jacobian_and_b_matrix(__pyx_v_self, __pyx_v_xt, __pyx_v_t, &__pyx_t_19); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3852, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3853:             cond_cov = np.multiply(dt, self.convert_vec_to_mat(self.B_vec))
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3853, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_multiply); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3853, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyFloat_FromDouble(__pyx_v_dt); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3853, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->B_vec), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 3853, __pyx_L1_error)
    __pyx_t_10 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->convert_vec_to_mat(__pyx_v_self, __pyx_t_13, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3853, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
    __pyx_t_13.memview = NULL;
    __pyx_t_13.data = NULL;
    __pyx_t_5 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_4, __pyx_t_10};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3853, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_4, __pyx_t_10};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3853, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    } else
    #endif
    {
      __pyx_t_7 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3853, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_9, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_9, __pyx_t_10);
      __pyx_t_4 = 0;
      __pyx_t_10 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3853, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3853, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_cond_cov, 1);
    __pyx_v_cond_cov = __pyx_t_12;
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
+3854:             J_dt = np.multiply(dt, self.J_mat)
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3854, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_multiply); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3854, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyFloat_FromDouble(__pyx_v_dt); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3854, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_10 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_7)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_8, ((PyObject *)__pyx_v_self->J_mat)};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3854, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
      PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_8, ((PyObject *)__pyx_v_self->J_mat)};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3854, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } else
    #endif
    {
      __pyx_t_4 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3854, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (__pyx_t_10) {
        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_10); __pyx_t_10 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_9, __pyx_t_8);
      __Pyx_INCREF(((PyObject *)__pyx_v_self->J_mat));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_self->J_mat));
      PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_9, ((PyObject *)__pyx_v_self->J_mat));
      __pyx_t_8 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3854, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3854, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_J_dt, 1);
    __pyx_v_J_dt = __pyx_t_12;
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
+3855:             U = np.add(np.identity(dim), J_dt)
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3855, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_add); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3855, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3855, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_identity); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3855, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3855, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_7 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_5, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_8);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3855, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = __pyx_memoryview_fromslice(__pyx_v_J_dt, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3855, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_8 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_7, __pyx_t_10};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3855, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_7, __pyx_t_10};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3855, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    } else
    #endif
    {
      __pyx_t_5 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3855, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__pyx_t_8) {
        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_8); __pyx_t_8 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_9, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_9, __pyx_t_10);
      __pyx_t_7 = 0;
      __pyx_t_10 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3855, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3855, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_U, 1);
    __pyx_v_U = __pyx_t_12;
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
+3856:             cov = np.add(np.dot(np.dot(U, cov), U.T), cond_cov)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3856, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_add); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3856, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3856, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_dot); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3856, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3856, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_dot); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3856, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __pyx_memoryview_fromslice(__pyx_v_U, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3856, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_cov, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3856, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_3 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_8, __pyx_t_6};
      __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3856, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_8, __pyx_t_6};
      __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3856, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    } else
    #endif
    {
      __pyx_t_20 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3856, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_20);
      if (__pyx_t_3) {
        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_3); __pyx_t_3 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_20, 0+__pyx_t_9, __pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_20, 1+__pyx_t_9, __pyx_t_6);
      __pyx_t_8 = 0;
      __pyx_t_6 = 0;
      __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_20, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3856, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_12 = __pyx_v_U;
    __PYX_INC_MEMVIEW(&__pyx_t_12, 1);
    if (unlikely(__pyx_memslice_transpose(&__pyx_t_12) == 0)) __PYX_ERR(0, 3856, __pyx_L1_error)
    __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_t_12, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3856, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
    __pyx_t_20 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_20 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_20)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_20);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_7)) {
      PyObject *__pyx_temp[3] = {__pyx_t_20, __pyx_t_10, __pyx_t_2};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3856, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
      PyObject *__pyx_temp[3] = {__pyx_t_20, __pyx_t_10, __pyx_t_2};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3856, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3856, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_20) {
        __Pyx_GIVEREF(__pyx_t_20); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_20); __pyx_t_20 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_9, __pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_9, __pyx_t_2);
      __pyx_t_10 = 0;
      __pyx_t_2 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3856, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_v_cond_cov, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3856, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_9 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_4, __pyx_t_7};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3856, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_4, __pyx_t_7};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3856, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    {
      __pyx_t_2 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3856, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (__pyx_t_6) {
        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6); __pyx_t_6 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_9, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_9, __pyx_t_7);
      __pyx_t_4 = 0;
      __pyx_t_7 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3856, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3856, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_cov, 1);
    __pyx_v_cov = __pyx_t_12;
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
+3857:             full_cov[i, :, i, :] = cov
    __pyx_t_12.data = __pyx_v_full_cov.data;
    __pyx_t_12.memview = __pyx_v_full_cov.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_12, 0);
    {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_full_cov.strides[0];
        __pyx_t_12.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_12.shape[0] = __pyx_v_full_cov.shape[1];
__pyx_t_12.strides[0] = __pyx_v_full_cov.strides[1];
    __pyx_t_12.suboffsets[0] = -1;

{
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_full_cov.strides[2];
        __pyx_t_12.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_12.shape[1] = __pyx_v_full_cov.shape[3];
__pyx_t_12.strides[1] = __pyx_v_full_cov.strides[3];
    __pyx_t_12.suboffsets[1] = -1;

if (unlikely(__pyx_memoryview_copy_contents(__pyx_v_cov, __pyx_t_12, 2, 2, 0) < 0)) __PYX_ERR(0, 3857, __pyx_L1_error)
    __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
+3858:             if i>0:
    __pyx_t_15 = ((__pyx_v_i > 0) != 0);
    if (__pyx_t_15) {
/* … */
    }
  }
+3859:                 for j in range(0, i):
      __pyx_t_21 = __pyx_v_i;
      __pyx_t_22 = __pyx_t_21;
      for (__pyx_t_23 = 0; __pyx_t_23 < __pyx_t_22; __pyx_t_23+=1) {
        __pyx_v_j = __pyx_t_23;
+3860:                     temp = np.dot(full_cov[j, :, i-1, :], U.T)
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3860, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_dot); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3860, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_12.data = __pyx_v_full_cov.data;
        __pyx_t_12.memview = __pyx_v_full_cov.memview;
        __PYX_INC_MEMVIEW(&__pyx_t_12, 0);
        {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_j;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_full_cov.strides[0];
        __pyx_t_12.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_12.shape[0] = __pyx_v_full_cov.shape[1];
__pyx_t_12.strides[0] = __pyx_v_full_cov.strides[1];
    __pyx_t_12.suboffsets[0] = -1;

{
    Py_ssize_t __pyx_tmp_idx = (__pyx_v_i - 1);
    Py_ssize_t __pyx_tmp_stride = __pyx_v_full_cov.strides[2];
        __pyx_t_12.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_12.shape[1] = __pyx_v_full_cov.shape[3];
__pyx_t_12.strides[1] = __pyx_v_full_cov.strides[3];
    __pyx_t_12.suboffsets[1] = -1;

__pyx_t_5 = __pyx_memoryview_fromslice(__pyx_t_12, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3860, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
        __pyx_t_12.memview = NULL;
        __pyx_t_12.data = NULL;
        __pyx_t_12 = __pyx_v_U;
        __PYX_INC_MEMVIEW(&__pyx_t_12, 1);
        if (unlikely(__pyx_memslice_transpose(&__pyx_t_12) == 0)) __PYX_ERR(0, 3860, __pyx_L1_error)
        __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_t_12, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3860, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
        __pyx_t_12.memview = NULL;
        __pyx_t_12.data = NULL;
        __pyx_t_4 = NULL;
        __pyx_t_9 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_2, function);
            __pyx_t_9 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_2)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_5, __pyx_t_7};
          __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3860, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_5, __pyx_t_7};
          __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3860, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        } else
        #endif
        {
          __pyx_t_6 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3860, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (__pyx_t_4) {
            __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
          }
          __Pyx_GIVEREF(__pyx_t_5);
          PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_9, __pyx_t_5);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_9, __pyx_t_7);
          __pyx_t_5 = 0;
          __pyx_t_7 = 0;
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3860, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3860, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_XDEC_MEMVIEW(&__pyx_v_temp, 1);
        __pyx_v_temp = __pyx_t_12;
        __pyx_t_12.memview = NULL;
        __pyx_t_12.data = NULL;
+3861:                     full_cov[j, :, i, :] = temp
        __pyx_t_12.data = __pyx_v_full_cov.data;
        __pyx_t_12.memview = __pyx_v_full_cov.memview;
        __PYX_INC_MEMVIEW(&__pyx_t_12, 0);
        {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_j;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_full_cov.strides[0];
        __pyx_t_12.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_12.shape[0] = __pyx_v_full_cov.shape[1];
__pyx_t_12.strides[0] = __pyx_v_full_cov.strides[1];
    __pyx_t_12.suboffsets[0] = -1;

{
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_full_cov.strides[2];
        __pyx_t_12.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_12.shape[1] = __pyx_v_full_cov.shape[3];
__pyx_t_12.strides[1] = __pyx_v_full_cov.strides[3];
    __pyx_t_12.suboffsets[1] = -1;

if (unlikely(__pyx_memoryview_copy_contents(__pyx_v_temp, __pyx_t_12, 2, 2, 0) < 0)) __PYX_ERR(0, 3861, __pyx_L1_error)
        __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
        __pyx_t_12.memview = NULL;
        __pyx_t_12.data = NULL;
+3862:                     full_cov[i, :, j, :] = temp.T
        __pyx_t_12 = __pyx_v_temp;
        __PYX_INC_MEMVIEW(&__pyx_t_12, 1);
        if (unlikely(__pyx_memslice_transpose(&__pyx_t_12) == 0)) __PYX_ERR(0, 3862, __pyx_L1_error)
        __pyx_t_24.data = __pyx_v_full_cov.data;
        __pyx_t_24.memview = __pyx_v_full_cov.memview;
        __PYX_INC_MEMVIEW(&__pyx_t_24, 0);
        {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_full_cov.strides[0];
        __pyx_t_24.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_24.shape[0] = __pyx_v_full_cov.shape[1];
__pyx_t_24.strides[0] = __pyx_v_full_cov.strides[1];
    __pyx_t_24.suboffsets[0] = -1;

{
    Py_ssize_t __pyx_tmp_idx = __pyx_v_j;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_full_cov.strides[2];
        __pyx_t_24.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_24.shape[1] = __pyx_v_full_cov.shape[3];
__pyx_t_24.strides[1] = __pyx_v_full_cov.strides[3];
    __pyx_t_24.suboffsets[1] = -1;

if (unlikely(__pyx_memoryview_copy_contents(__pyx_t_12, __pyx_t_24, 2, 2, 0) < 0)) __PYX_ERR(0, 3862, __pyx_L1_error)
        __PYX_XDEC_MEMVIEW(&__pyx_t_24, 1);
        __pyx_t_24.memview = NULL;
        __pyx_t_24.data = NULL;
        __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
        __pyx_t_12.memview = NULL;
        __pyx_t_12.data = NULL;
      }
+3863:         return xm[1:], np.reshape(full_cov, ((Nf-1)*dim, (Nf-1)*dim)) # returns mean and cov for all but first (fixed!) time point
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_12.data = __pyx_v_xm.data;
  __pyx_t_12.memview = __pyx_v_xm.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_12, 0);
  __pyx_t_9 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_12,
    __pyx_v_xm.shape[0], __pyx_v_xm.strides[0], __pyx_v_xm.suboffsets[0],
    0,
    0,
    &__pyx_t_9,
    1,
    0,
    0,
    1,
    0,
    0,
    1) < 0))
{
    __PYX_ERR(0, 3863, __pyx_L1_error)
}

__pyx_t_12.shape[1] = __pyx_v_xm.shape[1];
__pyx_t_12.strides[1] = __pyx_v_xm.strides[1];
    __pyx_t_12.suboffsets[1] = -1;

__pyx_t_1 = __pyx_memoryview_fromslice(__pyx_t_12, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
  __pyx_t_12.memview = NULL;
  __pyx_t_12.data = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_reshape); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_full_cov, 4, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = PyInt_FromSsize_t(((__pyx_v_Nf - 1) * __pyx_v_dim)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = PyInt_FromSsize_t(((__pyx_v_Nf - 1) * __pyx_v_dim)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_4);
  __pyx_t_5 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_6, __pyx_t_10};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3863, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_6, __pyx_t_10};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3863, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3863, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_9, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_9, __pyx_t_10);
    __pyx_t_6 = 0;
    __pyx_t_10 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3863, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_7;
  __pyx_t_7 = 0;
  goto __pyx_L0;
 3864: 
+3865:     cpdef _rhs0(self, t, xt):
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_141_rhs0(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6pyross_9inference_8SIR_type__rhs0(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_t, PyObject *__pyx_v_xt, int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_rhs0", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_rhs0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3865, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_6pyross_9inference_8SIR_type_141_rhs0)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_5 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_3)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_t, __pyx_v_xt};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3865, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_t, __pyx_v_xt};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3865, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        {
          __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3865, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (__pyx_t_4) {
            __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
          }
          __Pyx_INCREF(__pyx_v_t);
          __Pyx_GIVEREF(__pyx_v_t);
          PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_t);
          __Pyx_INCREF(__pyx_v_xt);
          __Pyx_GIVEREF(__pyx_v_xt);
          PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_xt);
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3865, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pyross.inference.SIR_type._rhs0", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_141_rhs0(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_141_rhs0(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_t = 0;
  PyObject *__pyx_v_xt = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_rhs0 (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t,&__pyx_n_s_xt,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xt)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_rhs0", 1, 2, 2, 1); __PYX_ERR(0, 3865, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_rhs0") < 0)) __PYX_ERR(0, 3865, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_t = values[0];
    __pyx_v_xt = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_rhs0", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3865, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type._rhs0", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_140_rhs0(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_t, __pyx_v_xt);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_140_rhs0(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_t, PyObject *__pyx_v_xt) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_rhs0", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6pyross_9inference_8SIR_type__rhs0(__pyx_v_self, __pyx_v_t, __pyx_v_xt, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3865, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type._rhs0", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3866:         self.det_model.set_contactMatrix(t, self.contactMatrix)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_det_model); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3866, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_set_contactMatrix); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3866, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_t, __pyx_v_self->contactMatrix};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3866, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_t, __pyx_v_self->contactMatrix};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3866, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3866, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_v_t);
    __Pyx_GIVEREF(__pyx_v_t);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_t);
    __Pyx_INCREF(__pyx_v_self->contactMatrix);
    __Pyx_GIVEREF(__pyx_v_self->contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_self->contactMatrix);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3866, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3867:         self.det_model.rhs(xt, t)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_det_model); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3867, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_rhs); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3867, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_xt, __pyx_v_t};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3867, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_xt, __pyx_v_t};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3867, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_2 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_xt);
    __Pyx_GIVEREF(__pyx_v_xt);
    PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_5, __pyx_v_xt);
    __Pyx_INCREF(__pyx_v_t);
    __Pyx_GIVEREF(__pyx_v_t);
    PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_5, __pyx_v_t);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3868:         return self.det_model.dxdt
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_det_model); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3868, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_dxdt); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3868, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_6;
  __pyx_t_6 = 0;
  goto __pyx_L0;
 3869: 
+3870:     cpdef _obtain_time_evol_op_2(self, sol, double t1, double t2):
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_143_obtain_time_evol_op_2(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6pyross_9inference_8SIR_type__obtain_time_evol_op_2(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_sol, double __pyx_v_t1, double __pyx_v_t2, int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_U = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_xi = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_xf = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_epsilon;
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_j;
  Py_ssize_t __pyx_v_steps;
  PyObject *__pyx_v_pos = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_obtain_time_evol_op_2", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_obtain_time_evol_op_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3870, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_6pyross_9inference_8SIR_type_143_obtain_time_evol_op_2)) {
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_3 = PyFloat_FromDouble(__pyx_v_t1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3870, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = PyFloat_FromDouble(__pyx_v_t2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3870, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_5 = __pyx_t_1; __pyx_t_6 = NULL;
        __pyx_t_7 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
          if (likely(__pyx_t_6)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
            __Pyx_INCREF(__pyx_t_6);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_5, function);
            __pyx_t_7 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_5)) {
          PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_v_sol, __pyx_t_3, __pyx_t_4};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3870, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
          PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_v_sol, __pyx_t_3, __pyx_t_4};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3870, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        } else
        #endif
        {
          __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3870, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          if (__pyx_t_6) {
            __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
          }
          __Pyx_INCREF(__pyx_v_sol);
          __Pyx_GIVEREF(__pyx_v_sol);
          PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_v_sol);
          __Pyx_GIVEREF(__pyx_t_3);
          PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_3);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_t_4);
          __pyx_t_3 = 0;
          __pyx_t_4 = 0;
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3870, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("pyross.inference.SIR_type._obtain_time_evol_op_2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_U, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_xi, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_xf, 1);
  __Pyx_XDECREF(__pyx_v_pos);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_143_obtain_time_evol_op_2(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_143_obtain_time_evol_op_2(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sol = 0;
  double __pyx_v_t1;
  double __pyx_v_t2;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_obtain_time_evol_op_2 (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sol,&__pyx_n_s_t1,&__pyx_n_s_t2,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sol)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_obtain_time_evol_op_2", 1, 3, 3, 1); __PYX_ERR(0, 3870, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_obtain_time_evol_op_2", 1, 3, 3, 2); __PYX_ERR(0, 3870, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_obtain_time_evol_op_2") < 0)) __PYX_ERR(0, 3870, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_sol = values[0];
    __pyx_v_t1 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_t1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3870, __pyx_L3_error)
    __pyx_v_t2 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_t2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3870, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_obtain_time_evol_op_2", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3870, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type._obtain_time_evol_op_2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_142_obtain_time_evol_op_2(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_sol, __pyx_v_t1, __pyx_v_t2);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_142_obtain_time_evol_op_2(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_sol, double __pyx_v_t1, double __pyx_v_t2) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_obtain_time_evol_op_2", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6pyross_9inference_8SIR_type__obtain_time_evol_op_2(__pyx_v_self, __pyx_v_sol, __pyx_v_t1, __pyx_v_t2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3870, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type._obtain_time_evol_op_2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3871:         cdef:
+3872:             double [:, :] U=self.U
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(((PyObject *)__pyx_v_self->U), PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 3872, __pyx_L1_error)
  __pyx_v_U = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
 3873:             double [:] xi, xf
+3874:             double epsilon=1./self.Omega
  __pyx_v_epsilon = (1. / __pyx_v_self->Omega);
+3875:             Py_ssize_t i, j, steps=self.steps
  __pyx_t_10 = __pyx_v_self->steps;
  __pyx_v_steps = __pyx_t_10;
+3876:         if isclose(t1, t2):
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_isclose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_t1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_8 = PyFloat_FromDouble(__pyx_v_t2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_4 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_5, __pyx_t_8};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3876, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_5, __pyx_t_8};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3876, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  } else
  #endif
  {
    __pyx_t_3 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3876, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_7, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_7, __pyx_t_8);
    __pyx_t_5 = 0;
    __pyx_t_8 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3876, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 3876, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_11) {
/* … */
    goto __pyx_L3;
  }
+3877:             U = np.eye(self.dim)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3877, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_eye); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3877, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3877, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_8, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3877, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 3877, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_U, 1);
    __pyx_v_U = __pyx_t_9;
    __pyx_t_9.memview = NULL;
    __pyx_t_9.data = NULL;
 3878:         else:
+3879:             xi = sol(t1)/self.Omega
  /*else*/ {
    __pyx_t_3 = PyFloat_FromDouble(__pyx_v_t1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3879, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_sol);
    __pyx_t_2 = __pyx_v_sol; __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_8, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3879, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->Omega); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3879, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3879, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3879, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_xi = __pyx_t_12;
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
+3880:             xf = sol(t2)/self.Omega
    __pyx_t_2 = PyFloat_FromDouble(__pyx_v_t2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3880, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_sol);
    __pyx_t_1 = __pyx_v_sol; __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_3 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_8, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3880, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->Omega); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3880, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3880, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 3880, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_xf = __pyx_t_12;
    __pyx_t_12.memview = NULL;
    __pyx_t_12.data = NULL;
+3881:             for i in range(self.dim):
    __pyx_t_10 = __pyx_v_self->dim;
    __pyx_t_13 = __pyx_t_10;
    for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
      __pyx_v_i = __pyx_t_14;
+3882:                 xi[i] += epsilon
      __pyx_t_15 = __pyx_v_i;
      *((double *) ( /* dim=0 */ (__pyx_v_xi.data + __pyx_t_15 * __pyx_v_xi.strides[0]) )) += __pyx_v_epsilon;
+3883:                 pos = self.integrate(xi, t1, t2, steps)[steps-1]
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_integrate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3883, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_xi, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3883, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_8 = PyFloat_FromDouble(__pyx_v_t1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3883, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_5 = PyFloat_FromDouble(__pyx_v_t2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3883, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_steps); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3883, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_6 = NULL;
      __pyx_t_7 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_6)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
          __pyx_t_7 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_1)) {
        PyObject *__pyx_temp[5] = {__pyx_t_6, __pyx_t_3, __pyx_t_8, __pyx_t_5, __pyx_t_4};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_7, 4+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3883, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
        PyObject *__pyx_temp[5] = {__pyx_t_6, __pyx_t_3, __pyx_t_8, __pyx_t_5, __pyx_t_4};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_7, 4+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3883, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else
      #endif
      {
        __pyx_t_16 = PyTuple_New(4+__pyx_t_7); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3883, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_16);
        if (__pyx_t_6) {
          __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_6); __pyx_t_6 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_16, 0+__pyx_t_7, __pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_16, 1+__pyx_t_7, __pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_16, 2+__pyx_t_7, __pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_16, 3+__pyx_t_7, __pyx_t_4);
        __pyx_t_3 = 0;
        __pyx_t_8 = 0;
        __pyx_t_5 = 0;
        __pyx_t_4 = 0;
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_16, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3883, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_17 = (__pyx_v_steps - 1);
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, __pyx_t_17, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3883, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_1);
      __pyx_t_1 = 0;
+3884:                 for j in range(self.dim):
      __pyx_t_17 = __pyx_v_self->dim;
      __pyx_t_18 = __pyx_t_17;
      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
        __pyx_v_j = __pyx_t_19;
+3885:                     U[j, i] = (pos[j]-xf[j])/(epsilon)
        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_pos, __pyx_v_j, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3885, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_15 = __pyx_v_j;
        __pyx_t_2 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_xf.data + __pyx_t_15 * __pyx_v_xf.strides[0]) )))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3885, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_16 = PyNumber_Subtract(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3885, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = PyFloat_FromDouble(__pyx_v_epsilon); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3885, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_16, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3885, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_20 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_20 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3885, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_15 = __pyx_v_j;
        __pyx_t_21 = __pyx_v_i;
        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_U.data + __pyx_t_15 * __pyx_v_U.strides[0]) ) + __pyx_t_21 * __pyx_v_U.strides[1]) )) = __pyx_t_20;
      }
+3886:                 xi[i] -= epsilon
      __pyx_t_21 = __pyx_v_i;
      *((double *) ( /* dim=0 */ (__pyx_v_xi.data + __pyx_t_21 * __pyx_v_xi.strides[0]) )) -= __pyx_v_epsilon;
    }
  }
  __pyx_L3:;
 3887: 
+3888:     def _obtain_time_evol_op(self, sol, double t1, double t2):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_145_obtain_time_evol_op(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_145_obtain_time_evol_op(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sol = 0;
  double __pyx_v_t1;
  double __pyx_v_t2;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_obtain_time_evol_op (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sol,&__pyx_n_s_t1,&__pyx_n_s_t2,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sol)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_obtain_time_evol_op", 1, 3, 3, 1); __PYX_ERR(0, 3888, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_obtain_time_evol_op", 1, 3, 3, 2); __PYX_ERR(0, 3888, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_obtain_time_evol_op") < 0)) __PYX_ERR(0, 3888, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_sol = values[0];
    __pyx_v_t1 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_t1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3888, __pyx_L3_error)
    __pyx_v_t2 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_t2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3888, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_obtain_time_evol_op", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3888, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type._obtain_time_evol_op", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_144_obtain_time_evol_op(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_sol, __pyx_v_t1, __pyx_v_t2);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_144_obtain_time_evol_op(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_sol, double __pyx_v_t1, double __pyx_v_t2) {
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_6__obtain_time_evol_op *__pyx_cur_scope;
  Py_ssize_t __pyx_v_steps;
  PyObject *__pyx_v_rhs = 0;
  PyObject *__pyx_v_U0 = NULL;
  PyObject *__pyx_v_U_vec = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_obtain_time_evol_op", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pyross_9inference___pyx_scope_struct_6__obtain_time_evol_op *)__pyx_tp_new_6pyross_9inference___pyx_scope_struct_6__obtain_time_evol_op(__pyx_ptype_6pyross_9inference___pyx_scope_struct_6__obtain_time_evol_op, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pyross_9inference___pyx_scope_struct_6__obtain_time_evol_op *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 3888, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_sol = __pyx_v_sol;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_sol);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_sol);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("pyross.inference.SIR_type._obtain_time_evol_op", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_rhs);
  __Pyx_XDECREF(__pyx_v_U0);
  __Pyx_XDECREF(__pyx_v_U_vec);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_obj_6pyross_9inference___pyx_scope_struct_6__obtain_time_evol_op {
  PyObject_HEAD
  struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self;
  PyObject *__pyx_v_sol;
};

 3889:         cdef:
+3890:             Py_ssize_t steps=self.steps
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self->steps;
  __pyx_v_steps = __pyx_t_1;
 3891: 
+3892:         def rhs(t, U_vec):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_20_obtain_time_evol_op_1rhs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6pyross_9inference_8SIR_type_20_obtain_time_evol_op_1rhs = {"rhs", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6pyross_9inference_8SIR_type_20_obtain_time_evol_op_1rhs, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_20_obtain_time_evol_op_1rhs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_t = 0;
  PyObject *__pyx_v_U_vec = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rhs (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t,&__pyx_n_s_U_vec,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_U_vec)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("rhs", 1, 2, 2, 1); __PYX_ERR(0, 3892, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rhs") < 0)) __PYX_ERR(0, 3892, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_t = values[0];
    __pyx_v_U_vec = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rhs", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3892, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type._obtain_time_evol_op.rhs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_20_obtain_time_evol_op_rhs(__pyx_self, __pyx_v_t, __pyx_v_U_vec);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_20_obtain_time_evol_op_rhs(PyObject *__pyx_self, PyObject *__pyx_v_t, PyObject *__pyx_v_U_vec) {
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_6__obtain_time_evol_op *__pyx_cur_scope;
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_6__obtain_time_evol_op *__pyx_outer_scope;
  PyObject *__pyx_v_xt = NULL;
  PyObject *__pyx_v_U_mat = NULL;
  PyObject *__pyx_v_dUdt = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rhs", 0);
  __pyx_outer_scope = (struct __pyx_obj_6pyross_9inference___pyx_scope_struct_6__obtain_time_evol_op *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pyross.inference.SIR_type._obtain_time_evol_op.rhs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_xt);
  __Pyx_XDECREF(__pyx_v_U_mat);
  __Pyx_XDECREF(__pyx_v_dUdt);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__35 = PyTuple_Pack(5, __pyx_n_s_t, __pyx_n_s_U_vec, __pyx_n_s_xt, __pyx_n_s_U_mat, __pyx_n_s_dUdt); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 3892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__35);
  __Pyx_GIVEREF(__pyx_tuple__35);
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pyross_9inference_8SIR_type_20_obtain_time_evol_op_1rhs, 0, __pyx_n_s_obtain_time_evol_op_locals_rhs, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pyross_inference, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_rhs = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyross_inference_pyx, __pyx_n_s_rhs, 3892, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 3892, __pyx_L1_error)
+3893:             xt = sol(t)/self.Omega
  if (unlikely(!__pyx_cur_scope->__pyx_v_sol)) { __Pyx_RaiseClosureNameError("sol"); __PYX_ERR(0, 3893, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_sol);
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_sol; __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_t) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_t);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3893, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3893, __pyx_L1_error) }
  __pyx_t_2 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_self->Omega); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3893, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3893, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_xt = __pyx_t_3;
  __pyx_t_3 = 0;
+3894:             self.compute_jacobian_and_b_matrix(xt, t, b_matrix=False, jacobian=True)
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3894, __pyx_L1_error) }
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_xt, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 3894, __pyx_L1_error)
  __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_v_t); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3894, __pyx_L1_error)
  __pyx_t_6.__pyx_n = 2;
  __pyx_t_6.b_matrix = Py_False;
  __pyx_t_6.jacobian = Py_True;
  __pyx_t_3 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_cur_scope->__pyx_v_self->__pyx_vtab)->compute_jacobian_and_b_matrix(__pyx_cur_scope->__pyx_v_self, __pyx_t_4, __pyx_t_5, &__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3894, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3895:             U_mat = np.reshape(U_vec, (self.dim, self.dim))
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_reshape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3895, __pyx_L1_error) }
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_cur_scope->__pyx_v_self->dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3895, __pyx_L1_error) }
  __pyx_t_7 = PyInt_FromSsize_t(__pyx_cur_scope->__pyx_v_self->dim); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_7);
  __pyx_t_2 = 0;
  __pyx_t_7 = 0;
  __pyx_t_7 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_U_vec, __pyx_t_8};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3895, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_U_vec, __pyx_t_8};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3895, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  } else
  #endif
  {
    __pyx_t_2 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3895, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__pyx_t_7) {
      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7); __pyx_t_7 = NULL;
    }
    __Pyx_INCREF(__pyx_v_U_vec);
    __Pyx_GIVEREF(__pyx_v_U_vec);
    PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_9, __pyx_v_U_vec);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_9, __pyx_t_8);
    __pyx_t_8 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3895, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_U_mat = __pyx_t_3;
  __pyx_t_3 = 0;
+3896:             dUdt = np.dot(self.J_mat, U_mat)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3896, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_dot); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3896, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3896, __pyx_L1_error) }
  __pyx_t_1 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, ((PyObject *)__pyx_cur_scope->__pyx_v_self->J_mat), __pyx_v_U_mat};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3896, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, ((PyObject *)__pyx_cur_scope->__pyx_v_self->J_mat), __pyx_v_U_mat};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3896, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3896, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_1) {
      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1); __pyx_t_1 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_v_self->J_mat));
    __Pyx_GIVEREF(((PyObject *)__pyx_cur_scope->__pyx_v_self->J_mat));
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_9, ((PyObject *)__pyx_cur_scope->__pyx_v_self->J_mat));
    __Pyx_INCREF(__pyx_v_U_mat);
    __Pyx_GIVEREF(__pyx_v_U_mat);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_9, __pyx_v_U_mat);
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3896, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_dUdt = __pyx_t_3;
  __pyx_t_3 = 0;
+3897:             self.integrator_step_count += 1
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3897, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3897, __pyx_L1_error) }
  __pyx_cur_scope->__pyx_v_self->integrator_step_count = (__pyx_cur_scope->__pyx_v_self->integrator_step_count + 1);
+3898:             if self.max_steps_lyapunov != 0 and self.integrator_step_count > self.max_steps_lyapunov:
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3898, __pyx_L1_error) }
  __pyx_t_11 = ((__pyx_cur_scope->__pyx_v_self->max_steps_lyapunov != 0) != 0);
  if (__pyx_t_11) {
  } else {
    __pyx_t_10 = __pyx_t_11;
    goto __pyx_L4_bool_binop_done;
  }
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3898, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3898, __pyx_L1_error) }
  __pyx_t_11 = ((__pyx_cur_scope->__pyx_v_self->integrator_step_count > __pyx_cur_scope->__pyx_v_self->max_steps_lyapunov) != 0);
  __pyx_t_10 = __pyx_t_11;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_10)) {
/* … */
  }
+3899:                 raise MaxIntegratorStepsException()
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_MaxIntegratorStepsException); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3899, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3899, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 3899, __pyx_L1_error)
+3900:             return np.ravel(dUdt)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_ravel); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_2, __pyx_v_dUdt) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_dUdt);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 3901: 
+3902:         if isclose(t1, t2): ## float precision
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_isclose); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_t1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_t2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_4, __pyx_t_5};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3902, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_4, __pyx_t_5};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3902, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3902, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_5);
    __pyx_t_4 = 0;
    __pyx_t_5 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3902, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 3902, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_9) {
/* … */
    goto __pyx_L3;
  }
+3903:             self.U = np.eye(self.dim)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3903, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_eye); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3903, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyInt_FromSsize_t(__pyx_cur_scope->__pyx_v_self->dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3903, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3903, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3903, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->U);
    __Pyx_DECREF(((PyObject *)__pyx_cur_scope->__pyx_v_self->U));
    __pyx_cur_scope->__pyx_v_self->U = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
 3904:         else:
+3905:             U0 = np.identity((self.dim)).flatten()
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3905, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_identity); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3905, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyInt_FromSsize_t(__pyx_cur_scope->__pyx_v_self->dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3905, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_8 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3905, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_flatten); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3905, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_2 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3905, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_v_U0 = __pyx_t_2;
    __pyx_t_2 = 0;
+3906:             U_vec = self._solve_lyapunov_type_eq(rhs, U0, t1, t2, steps)
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_solve_lyapunov_type_eq); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3906, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = PyFloat_FromDouble(__pyx_v_t1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3906, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_3 = PyFloat_FromDouble(__pyx_v_t2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3906, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_steps); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3906, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_7 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[6] = {__pyx_t_6, __pyx_v_rhs, __pyx_v_U0, __pyx_t_8, __pyx_t_3, __pyx_t_4};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 5+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3906, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[6] = {__pyx_t_6, __pyx_v_rhs, __pyx_v_U0, __pyx_t_8, __pyx_t_3, __pyx_t_4};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 5+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3906, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_10 = PyTuple_New(5+__pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3906, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      if (__pyx_t_6) {
        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_6); __pyx_t_6 = NULL;
      }
      __Pyx_INCREF(__pyx_v_rhs);
      __Pyx_GIVEREF(__pyx_v_rhs);
      PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_7, __pyx_v_rhs);
      __Pyx_INCREF(__pyx_v_U0);
      __Pyx_GIVEREF(__pyx_v_U0);
      PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_7, __pyx_v_U0);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_7, __pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_10, 3+__pyx_t_7, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_10, 4+__pyx_t_7, __pyx_t_4);
      __pyx_t_8 = 0;
      __pyx_t_3 = 0;
      __pyx_t_4 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3906, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_v_U_vec = __pyx_t_2;
    __pyx_t_2 = 0;
+3907:             self.U = np.reshape(U_vec, (self.dim, self.dim))
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3907, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_reshape); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3907, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyInt_FromSsize_t(__pyx_cur_scope->__pyx_v_self->dim); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3907, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PyInt_FromSsize_t(__pyx_cur_scope->__pyx_v_self->dim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3907, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3907, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4);
    __pyx_t_5 = 0;
    __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
        __pyx_t_7 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_10)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_U_vec, __pyx_t_3};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3907, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_U_vec, __pyx_t_3};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3907, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    {
      __pyx_t_5 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3907, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_INCREF(__pyx_v_U_vec);
      __Pyx_GIVEREF(__pyx_v_U_vec);
      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_7, __pyx_v_U_vec);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_7, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3907, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3907, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->U);
    __Pyx_DECREF(((PyObject *)__pyx_cur_scope->__pyx_v_self->U));
    __pyx_cur_scope->__pyx_v_self->U = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
  }
  __pyx_L3:;
 3908: 
+3909:     def _solve_lyapunov_type_eq(self, rhs, M0, t1, t2, steps):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_147_solve_lyapunov_type_eq(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_147_solve_lyapunov_type_eq(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_rhs = 0;
  PyObject *__pyx_v_M0 = 0;
  PyObject *__pyx_v_t1 = 0;
  PyObject *__pyx_v_t2 = 0;
  PyObject *__pyx_v_steps = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_solve_lyapunov_type_eq (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rhs,&__pyx_n_s_M0,&__pyx_n_s_t1,&__pyx_n_s_t2,&__pyx_n_s_steps,0};
    PyObject* values[5] = {0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rhs)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_solve_lyapunov_type_eq", 1, 5, 5, 1); __PYX_ERR(0, 3909, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_solve_lyapunov_type_eq", 1, 5, 5, 2); __PYX_ERR(0, 3909, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_solve_lyapunov_type_eq", 1, 5, 5, 3); __PYX_ERR(0, 3909, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_steps)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_solve_lyapunov_type_eq", 1, 5, 5, 4); __PYX_ERR(0, 3909, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_solve_lyapunov_type_eq") < 0)) __PYX_ERR(0, 3909, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
    }
    __pyx_v_rhs = values[0];
    __pyx_v_M0 = values[1];
    __pyx_v_t1 = values[2];
    __pyx_v_t2 = values[3];
    __pyx_v_steps = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_solve_lyapunov_type_eq", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3909, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type._solve_lyapunov_type_eq", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_146_solve_lyapunov_type_eq(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_rhs, __pyx_v_M0, __pyx_v_t1, __pyx_v_t2, __pyx_v_steps);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_146_solve_lyapunov_type_eq(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_rhs, PyObject *__pyx_v_M0, PyObject *__pyx_v_t1, PyObject *__pyx_v_t2, PyObject *__pyx_v_steps) {
  PyObject *__pyx_v_sol_vec = NULL;
  PyObject *__pyx_v_res = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_solve_lyapunov_type_eq", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("pyross.inference.SIR_type._solve_lyapunov_type_eq", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_sol_vec);
  __Pyx_XDECREF(__pyx_v_res);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3910:         if self.lyapunov_method=='euler':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->lyapunov_method, __pyx_n_u_euler, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3910, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+3911:             sol_vec = pyross.utils.forward_euler_integration(rhs, M0, t1, t2, steps)[steps-1]
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyross); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_forward_euler_integration); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[6] = {__pyx_t_5, __pyx_v_rhs, __pyx_v_M0, __pyx_v_t1, __pyx_v_t2, __pyx_v_steps};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 5+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3911, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_3);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[6] = {__pyx_t_5, __pyx_v_rhs, __pyx_v_M0, __pyx_v_t1, __pyx_v_t2, __pyx_v_steps};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 5+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3911, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_3);
    } else
    #endif
    {
      __pyx_t_7 = PyTuple_New(5+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3911, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_INCREF(__pyx_v_rhs);
      __Pyx_GIVEREF(__pyx_v_rhs);
      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_rhs);
      __Pyx_INCREF(__pyx_v_M0);
      __Pyx_GIVEREF(__pyx_v_M0);
      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_M0);
      __Pyx_INCREF(__pyx_v_t1);
      __Pyx_GIVEREF(__pyx_v_t1);
      PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_v_t1);
      __Pyx_INCREF(__pyx_v_t2);
      __Pyx_GIVEREF(__pyx_v_t2);
      PyTuple_SET_ITEM(__pyx_t_7, 3+__pyx_t_6, __pyx_v_t2);
      __Pyx_INCREF(__pyx_v_steps);
      __Pyx_GIVEREF(__pyx_v_steps);
      PyTuple_SET_ITEM(__pyx_t_7, 4+__pyx_t_6, __pyx_v_steps);
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3911, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyInt_SubtractObjC(__pyx_v_steps, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_sol_vec = __pyx_t_7;
    __pyx_t_7 = 0;
+3912:         elif self.lyapunov_method=='RK45':
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->lyapunov_method, __pyx_n_u_RK45, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3912, __pyx_L1_error)
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+3913:             res = solve_ivp(rhs, (t1, t2), M0, method='RK45', t_eval=np.array([t2]), first_step=(t2-t1)/steps, max_step=(t2-t1)/steps, rtol=self.rtol_lyapunov)
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_solve_ivp); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_t1);
    __Pyx_GIVEREF(__pyx_v_t1);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_t1);
    __Pyx_INCREF(__pyx_v_t2);
    __Pyx_GIVEREF(__pyx_v_t2);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_t2);
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_rhs);
    __Pyx_GIVEREF(__pyx_v_rhs);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_rhs);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4);
    __Pyx_INCREF(__pyx_v_M0);
    __Pyx_GIVEREF(__pyx_v_M0);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_M0);
    __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_method, __pyx_n_u_RK45) < 0) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_array); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyList_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_v_t2);
    __Pyx_GIVEREF(__pyx_v_t2);
    PyList_SET_ITEM(__pyx_t_8, 0, __pyx_v_t2);
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
      }
    }
    __pyx_t_5 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_10, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_t_eval, __pyx_t_5) < 0) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyNumber_Subtract(__pyx_v_t2, __pyx_v_t1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_9 = __Pyx_PyNumber_Divide(__pyx_t_5, __pyx_v_steps); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_first_step, __pyx_t_9) < 0) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = PyNumber_Subtract(__pyx_v_t2, __pyx_v_t1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_5 = __Pyx_PyNumber_Divide(__pyx_t_9, __pyx_v_steps); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_max_step, __pyx_t_5) < 0) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyFloat_FromDouble(__pyx_v_self->rtol_lyapunov); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_rtol, __pyx_t_5) < 0) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_res = __pyx_t_5;
    __pyx_t_5 = 0;
+3914:             sol_vec = res.y[:, 0]
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_res, __pyx_n_s_y); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3914, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_tuple__2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3914, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_v_sol_vec = __pyx_t_4;
    __pyx_t_4 = 0;
+3915:         elif self.lyapunov_method=='LSODA':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->lyapunov_method, __pyx_n_u_LSODA, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3915, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+3916:             res = solve_ivp(rhs, (t1, t2), M0, method='LSODA', t_eval=np.array([t2]), first_step=(t2-t1)/steps, max_step=(t2-t1)/steps, rtol=self.rtol_lyapunov)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_solve_ivp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v_t1);
    __Pyx_GIVEREF(__pyx_v_t1);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_t1);
    __Pyx_INCREF(__pyx_v_t2);
    __Pyx_GIVEREF(__pyx_v_t2);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_t2);
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_rhs);
    __Pyx_GIVEREF(__pyx_v_rhs);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_rhs);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
    __Pyx_INCREF(__pyx_v_M0);
    __Pyx_GIVEREF(__pyx_v_M0);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_M0);
    __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_method, __pyx_n_u_LSODA) < 0) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_array); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_v_t2);
    __Pyx_GIVEREF(__pyx_v_t2);
    PyList_SET_ITEM(__pyx_t_9, 0, __pyx_v_t2);
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_7 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_10, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_9);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_t_eval, __pyx_t_7) < 0) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyNumber_Subtract(__pyx_v_t2, __pyx_v_t1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyNumber_Divide(__pyx_t_7, __pyx_v_steps); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_first_step, __pyx_t_8) < 0) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyNumber_Subtract(__pyx_v_t2, __pyx_v_t1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = __Pyx_PyNumber_Divide(__pyx_t_8, __pyx_v_steps); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_max_step, __pyx_t_7) < 0) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyFloat_FromDouble(__pyx_v_self->rtol_lyapunov); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_rtol, __pyx_t_7) < 0) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_v_res = __pyx_t_7;
    __pyx_t_7 = 0;
+3917:             sol_vec = res.y[:, 0]
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_res, __pyx_n_s_y); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3917, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_tuple__2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3917, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_v_sol_vec = __pyx_t_5;
    __pyx_t_5 = 0;
+3918:         elif self.lyapunov_method=='RK2':
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->lyapunov_method, __pyx_n_u_RK2, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3918, __pyx_L1_error)
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+3919:             sol_vec = pyross.utils.RK2_integration(rhs, M0, t1, t2, steps)[steps-1]
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_pyross); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3919, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_utils); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3919, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_RK2_integration); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3919, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_7)) {
      PyObject *__pyx_temp[6] = {__pyx_t_3, __pyx_v_rhs, __pyx_v_M0, __pyx_v_t1, __pyx_v_t2, __pyx_v_steps};
      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 5+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3919, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_5);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
      PyObject *__pyx_temp[6] = {__pyx_t_3, __pyx_v_rhs, __pyx_v_M0, __pyx_v_t1, __pyx_v_t2, __pyx_v_steps};
      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 5+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3919, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_5);
    } else
    #endif
    {
      __pyx_t_4 = PyTuple_New(5+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3919, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (__pyx_t_3) {
        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
      }
      __Pyx_INCREF(__pyx_v_rhs);
      __Pyx_GIVEREF(__pyx_v_rhs);
      PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_6, __pyx_v_rhs);
      __Pyx_INCREF(__pyx_v_M0);
      __Pyx_GIVEREF(__pyx_v_M0);
      PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_6, __pyx_v_M0);
      __Pyx_INCREF(__pyx_v_t1);
      __Pyx_GIVEREF(__pyx_v_t1);
      PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_6, __pyx_v_t1);
      __Pyx_INCREF(__pyx_v_t2);
      __Pyx_GIVEREF(__pyx_v_t2);
      PyTuple_SET_ITEM(__pyx_t_4, 3+__pyx_t_6, __pyx_v_t2);
      __Pyx_INCREF(__pyx_v_steps);
      __Pyx_GIVEREF(__pyx_v_steps);
      PyTuple_SET_ITEM(__pyx_t_4, 4+__pyx_t_6, __pyx_v_steps);
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3919, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyInt_SubtractObjC(__pyx_v_steps, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3919, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3919, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_v_sol_vec = __pyx_t_4;
    __pyx_t_4 = 0;
+3920:         elif self.lyapunov_method=='RK4':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->lyapunov_method, __pyx_n_u_RK4, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3920, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (likely(__pyx_t_2)) {
/* … */
    goto __pyx_L3;
  }
+3921:             sol_vec = pyross.utils.RK4_integration(rhs, M0, t1, t2, steps)[steps-1]
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_pyross); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3921, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3921, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_RK4_integration); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3921, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_7)) {
      PyObject *__pyx_temp[6] = {__pyx_t_5, __pyx_v_rhs, __pyx_v_M0, __pyx_v_t1, __pyx_v_t2, __pyx_v_steps};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 5+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3921, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_4);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
      PyObject *__pyx_temp[6] = {__pyx_t_5, __pyx_v_rhs, __pyx_v_M0, __pyx_v_t1, __pyx_v_t2, __pyx_v_steps};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 5+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3921, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_4);
    } else
    #endif
    {
      __pyx_t_3 = PyTuple_New(5+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3921, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_INCREF(__pyx_v_rhs);
      __Pyx_GIVEREF(__pyx_v_rhs);
      PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_6, __pyx_v_rhs);
      __Pyx_INCREF(__pyx_v_M0);
      __Pyx_GIVEREF(__pyx_v_M0);
      PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_6, __pyx_v_M0);
      __Pyx_INCREF(__pyx_v_t1);
      __Pyx_GIVEREF(__pyx_v_t1);
      PyTuple_SET_ITEM(__pyx_t_3, 2+__pyx_t_6, __pyx_v_t1);
      __Pyx_INCREF(__pyx_v_t2);
      __Pyx_GIVEREF(__pyx_v_t2);
      PyTuple_SET_ITEM(__pyx_t_3, 3+__pyx_t_6, __pyx_v_t2);
      __Pyx_INCREF(__pyx_v_steps);
      __Pyx_GIVEREF(__pyx_v_steps);
      PyTuple_SET_ITEM(__pyx_t_3, 4+__pyx_t_6, __pyx_v_steps);
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3921, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyInt_SubtractObjC(__pyx_v_steps, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3921, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3921, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_v_sol_vec = __pyx_t_3;
    __pyx_t_3 = 0;
 3922:         else:
+3923:             raise Exception("Error: lyapunov method not found. Use set_lyapunov_method to change the method")
  /*else*/ {
    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__37, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3923, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 3923, __pyx_L1_error)
  }
  __pyx_L3:;
/* … */
  __pyx_tuple__37 = PyTuple_Pack(1, __pyx_kp_u_Error_lyapunov_method_not_found); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 3923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__37);
  __Pyx_GIVEREF(__pyx_tuple__37);
+3924:         return sol_vec
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_sol_vec);
  __pyx_r = __pyx_v_sol_vec;
  goto __pyx_L0;
 3925: 
+3926:     cdef _compute_dsigdt(self, double [:] sig):
static PyObject *__pyx_f_6pyross_9inference_8SIR_type__compute_dsigdt(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, __Pyx_memviewslice __pyx_v_sig) {
  Py_ssize_t __pyx_v_i;
  __Pyx_memviewslice __pyx_v_dsigdt = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_B_vec = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_linear_term_vec = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_sigma_mat = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_v_linear_term = 0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_linear_term;
  __Pyx_Buffer __pyx_pybuffer_linear_term;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_compute_dsigdt", 0);
  __pyx_pybuffer_linear_term.pybuffer.buf = NULL;
  __pyx_pybuffer_linear_term.refcount = 0;
  __pyx_pybuffernd_linear_term.data = NULL;
  __pyx_pybuffernd_linear_term.rcbuffer = &__pyx_pybuffer_linear_term;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __Pyx_XDECREF(__pyx_t_2);
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_linear_term.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("pyross.inference.SIR_type._compute_dsigdt", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_linear_term.rcbuffer->pybuffer);
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_dsigdt, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_B_vec, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_linear_term_vec, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_sigma_mat, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_linear_term);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3927:         cdef:
 3928:             Py_ssize_t i, j
+3929:             double [:] dsigdt=self.dsigmadt, B_vec=self.B_vec, linear_term_vec
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->dsigmadt), PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 3929, __pyx_L1_error)
  __pyx_v_dsigdt = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->B_vec), PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 3929, __pyx_L1_error)
  __pyx_v_B_vec = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
 3930:             double [:, :] sigma_mat
 3931:             np.ndarray[DTYPE_t, ndim=2] linear_term
+3932:         sigma_mat = self.convert_vec_to_mat(sig)
  __pyx_t_2 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR_type *)__pyx_v_self->__pyx_vtab)->convert_vec_to_mat(__pyx_v_self, __pyx_v_sig, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 3932, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_sigma_mat = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
+3933:         linear_term = np.dot(self.J_mat, sigma_mat) + np.dot(sigma_mat, (self.J_mat).T)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_dot); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_sigma_mat, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, ((PyObject *)__pyx_v_self->J_mat), __pyx_t_4};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3933, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, ((PyObject *)__pyx_v_self->J_mat), __pyx_t_4};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3933, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3933, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_v_self->J_mat));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_self->J_mat));
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, ((PyObject *)__pyx_v_self->J_mat));
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3933, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_dot); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __pyx_memoryview_fromslice(__pyx_v_sigma_mat, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->J_mat), __pyx_n_s_T); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_9 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_8, __pyx_t_6};
    __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3933, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_8, __pyx_t_6};
    __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3933, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else
  #endif
  {
    __pyx_t_10 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3933, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__pyx_t_9) {
      __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_7, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_7, __pyx_t_6);
    __pyx_t_8 = 0;
    __pyx_t_6 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_10, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3933, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_Add(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3933, __pyx_L1_error)
  __pyx_t_11 = ((PyArrayObject *)__pyx_t_4);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_linear_term.rcbuffer->pybuffer);
    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_linear_term.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_7 < 0)) {
      PyErr_Fetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_linear_term.rcbuffer->pybuffer, (PyObject*)__pyx_v_linear_term, &__Pyx_TypeInfo_nn___pyx_t_6pyross_9inference_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
      }
      __pyx_t_12 = __pyx_t_13 = __pyx_t_14 = 0;
    }
    __pyx_pybuffernd_linear_term.diminfo[0].strides = __pyx_pybuffernd_linear_term.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_linear_term.diminfo[0].shape = __pyx_pybuffernd_linear_term.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_linear_term.diminfo[1].strides = __pyx_pybuffernd_linear_term.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_linear_term.diminfo[1].shape = __pyx_pybuffernd_linear_term.rcbuffer->pybuffer.shape[1];
    if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 3933, __pyx_L1_error)
  }
  __pyx_t_11 = 0;
  __pyx_v_linear_term = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
+3934:         linear_term_vec = linear_term[(self.rows, self.cols)]
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3934, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->rows));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->rows));
  PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_self->rows));
  __Pyx_INCREF(((PyObject *)__pyx_v_self->cols));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->cols));
  PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_self->cols));
  __pyx_t_5 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_linear_term), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3934, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 3934, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_linear_term_vec = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+3935:         for i in range(self.vec_size):
  __pyx_t_15 = __pyx_v_self->vec_size;
  __pyx_t_16 = __pyx_t_15;
  for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
    __pyx_v_i = __pyx_t_17;
+3936:             dsigdt[i] = B_vec[i] + linear_term_vec[i]
    __pyx_t_18 = __pyx_v_i;
    __pyx_t_19 = __pyx_v_i;
    __pyx_t_20 = __pyx_v_i;
    *((double *) ( /* dim=0 */ (__pyx_v_dsigdt.data + __pyx_t_20 * __pyx_v_dsigdt.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_B_vec.data + __pyx_t_18 * __pyx_v_B_vec.strides[0]) ))) + (*((double *) ( /* dim=0 */ (__pyx_v_linear_term_vec.data + __pyx_t_19 * __pyx_v_linear_term_vec.strides[0]) ))));
  }
 3937: 
+3938:     cpdef convert_vec_to_mat(self, double [:] cov):
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_149convert_vec_to_mat(PyObject *__pyx_v_self, PyObject *__pyx_arg_cov); /*proto*/
static PyObject *__pyx_f_6pyross_9inference_8SIR_type_convert_vec_to_mat(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, __Pyx_memviewslice __pyx_v_cov, int __pyx_skip_dispatch) {
  __Pyx_memviewslice __pyx_v_cov_mat = { 0, 0, { 0 }, { 0 }, { 0 } };
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_j;
  Py_ssize_t __pyx_v_count;
  Py_ssize_t __pyx_v_dim;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("convert_vec_to_mat", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_convert_vec_to_mat); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3938, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_6pyross_9inference_8SIR_type_149convert_vec_to_mat)) {
        __Pyx_XDECREF(__pyx_r);
        if (unlikely(!__pyx_v_cov.memview)) { __Pyx_RaiseUnboundLocalError("cov"); __PYX_ERR(0, 3938, __pyx_L1_error) }
        __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_cov, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3938, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; __pyx_t_5 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
          }
        }
        __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3938, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.convert_vec_to_mat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_cov_mat, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_149convert_vec_to_mat(PyObject *__pyx_v_self, PyObject *__pyx_arg_cov); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_149convert_vec_to_mat(PyObject *__pyx_v_self, PyObject *__pyx_arg_cov) {
  __Pyx_memviewslice __pyx_v_cov = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("convert_vec_to_mat (wrapper)", 0);
  assert(__pyx_arg_cov); {
    __pyx_v_cov = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_arg_cov, PyBUF_WRITABLE); if (unlikely(!__pyx_v_cov.memview)) __PYX_ERR(0, 3938, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.convert_vec_to_mat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_148convert_vec_to_mat(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_cov);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_148convert_vec_to_mat(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, __Pyx_memviewslice __pyx_v_cov) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("convert_vec_to_mat", 0);
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_v_cov.memview)) { __Pyx_RaiseUnboundLocalError("cov"); __PYX_ERR(0, 3938, __pyx_L1_error) }
  __pyx_t_1 = __pyx_f_6pyross_9inference_8SIR_type_convert_vec_to_mat(__pyx_v_self, __pyx_v_cov, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3938, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.convert_vec_to_mat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_cov, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3939:         cdef:
 3940:             double [:, :] cov_mat
+3941:             Py_ssize_t i, j, count=0, dim=self.dim
  __pyx_v_count = 0;
  __pyx_t_6 = __pyx_v_self->dim;
  __pyx_v_dim = __pyx_t_6;
+3942:         cov_mat = np.empty((dim, dim), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3942, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3942, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3942, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3942, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3942, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4);
  __pyx_t_1 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3942, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3942, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3942, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 3942, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3942, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 3942, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_cov_mat = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
+3943:         for i in range(dim):
  __pyx_t_6 = __pyx_v_dim;
  __pyx_t_8 = __pyx_t_6;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;
+3944:             cov_mat[i, i] = cov[count]
    __pyx_t_10 = __pyx_v_count;
    __pyx_t_11 = __pyx_v_i;
    __pyx_t_12 = __pyx_v_i;
    *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_cov_mat.data + __pyx_t_11 * __pyx_v_cov_mat.strides[0]) ) + __pyx_t_12 * __pyx_v_cov_mat.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_cov.data + __pyx_t_10 * __pyx_v_cov.strides[0]) )));
+3945:             count += 1
    __pyx_v_count = (__pyx_v_count + 1);
+3946:             for j in range(i+1, dim):
    __pyx_t_13 = __pyx_v_dim;
    __pyx_t_14 = __pyx_t_13;
    for (__pyx_t_15 = (__pyx_v_i + 1); __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
      __pyx_v_j = __pyx_t_15;
+3947:                 cov_mat[i, j] = cov[count]
      __pyx_t_10 = __pyx_v_count;
      __pyx_t_12 = __pyx_v_i;
      __pyx_t_11 = __pyx_v_j;
      *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_cov_mat.data + __pyx_t_12 * __pyx_v_cov_mat.strides[0]) ) + __pyx_t_11 * __pyx_v_cov_mat.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_cov.data + __pyx_t_10 * __pyx_v_cov.strides[0]) )));
+3948:                 cov_mat[j, i] = cov[count]
      __pyx_t_10 = __pyx_v_count;
      __pyx_t_11 = __pyx_v_j;
      __pyx_t_12 = __pyx_v_i;
      *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_cov_mat.data + __pyx_t_11 * __pyx_v_cov_mat.strides[0]) ) + __pyx_t_12 * __pyx_v_cov_mat.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_cov.data + __pyx_t_10 * __pyx_v_cov.strides[0]) )));
+3949:                 count += 1
      __pyx_v_count = (__pyx_v_count + 1);
    }
  }
+3950:         return cov_mat
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_cov_mat, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3950, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 3951: 
+3952:     def _process_contact_matrix(self, contactMatrix, generator, intervention_fun):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_151_process_contact_matrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_151_process_contact_matrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_contactMatrix = 0;
  PyObject *__pyx_v_generator = 0;
  PyObject *__pyx_v_intervention_fun = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_process_contact_matrix (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_contactMatrix,&__pyx_n_s_generator,&__pyx_n_s_intervention_fun,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_contactMatrix)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_generator)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_process_contact_matrix", 1, 3, 3, 1); __PYX_ERR(0, 3952, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_intervention_fun)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_process_contact_matrix", 1, 3, 3, 2); __PYX_ERR(0, 3952, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_process_contact_matrix") < 0)) __PYX_ERR(0, 3952, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_contactMatrix = values[0];
    __pyx_v_generator = values[1];
    __pyx_v_intervention_fun = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_process_contact_matrix", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3952, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type._process_contact_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_150_process_contact_matrix(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_contactMatrix, __pyx_v_generator, __pyx_v_intervention_fun);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_150_process_contact_matrix(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, PyObject *__pyx_v_contactMatrix, PyObject *__pyx_v_generator, PyObject *__pyx_v_intervention_fun) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_process_contact_matrix", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.SIR_type._process_contact_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3953:         if (contactMatrix is None) == (generator is None):
  __pyx_t_1 = (__pyx_v_contactMatrix == Py_None);
  __pyx_t_2 = (__pyx_v_generator == Py_None);
  __pyx_t_3 = ((__pyx_t_1 == __pyx_t_2) != 0);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+3954:             raise Exception('Specify either a fixed contactMatrix or a generator')
    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__38, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3954, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(0, 3954, __pyx_L1_error)
/* … */
  __pyx_tuple__38 = PyTuple_Pack(1, __pyx_kp_u_Specify_either_a_fixed_contactMa); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 3954, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__38);
  __Pyx_GIVEREF(__pyx_tuple__38);
+3955:         if (intervention_fun is not None) and (generator is None):
  __pyx_t_2 = (__pyx_v_intervention_fun != Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
  } else {
    __pyx_t_3 = __pyx_t_1;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_1 = (__pyx_v_generator == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  __pyx_t_3 = __pyx_t_2;
  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+3956:             raise Exception('Specify a generator')
    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__39, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3956, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(0, 3956, __pyx_L1_error)
/* … */
  __pyx_tuple__39 = PyTuple_Pack(1, __pyx_kp_u_Specify_a_generator); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 3956, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__39);
  __Pyx_GIVEREF(__pyx_tuple__39);
+3957:         if contactMatrix is not None:
  __pyx_t_3 = (__pyx_v_contactMatrix != Py_None);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
/* … */
  }
+3958:             self.contactMatrix = contactMatrix
    __Pyx_INCREF(__pyx_v_contactMatrix);
    __Pyx_GIVEREF(__pyx_v_contactMatrix);
    __Pyx_GOTREF(__pyx_v_self->contactMatrix);
    __Pyx_DECREF(__pyx_v_self->contactMatrix);
    __pyx_v_self->contactMatrix = __pyx_v_contactMatrix;
 3959: 
 3960: 
+3961:     cdef compute_jacobian_and_b_matrix(self, double [:] x, double t,
static PyObject *__pyx_f_6pyross_9inference_8SIR_type_compute_jacobian_and_b_matrix(CYTHON_UNUSED struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_x, CYTHON_UNUSED double __pyx_v_t, struct __pyx_opt_args_6pyross_9inference_8SIR_type_compute_jacobian_and_b_matrix *__pyx_optional_args) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("compute_jacobian_and_b_matrix", 0);
  if (__pyx_optional_args) {
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR_type.compute_jacobian_and_b_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_6pyross_9inference_8SIR_type_compute_jacobian_and_b_matrix {
  int __pyx_n;
  PyObject *b_matrix;
  PyObject *jacobian;
};
 3962:                                              b_matrix=True, jacobian=False):
+3963:         raise NotImplementedError("Please Implement compute_jacobian_and_b_matrix in subclass")
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_NotImplementedError, __pyx_tuple__40, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __PYX_ERR(0, 3963, __pyx_L1_error)
/* … */
  __pyx_tuple__40 = PyTuple_Pack(1, __pyx_kp_u_Please_Implement_compute_jacobia); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 3963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__40);
  __Pyx_GIVEREF(__pyx_tuple__40);
 3964: 
+3965:     def integrate(self, double [:] x0, double t1, double t2, Py_ssize_t steps,
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_153integrate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6pyross_9inference_8SIR_type_152integrate[] = "An light weight integrate method similar to `simulate` in pyross.deterministic\n\n        Parameters\n        ----------\n        x0: np.array\n            Initial state of the given model\n        t1: float\n            Initial time of integrator\n        t2: float\n            Final time of integrator\n        steps: int\n            Number of time steps for numerical integrator evaluation.\n        max_step: int, optional\n            The maximum allowed step size of the integrator.\n\n        Returns\n        -------\n        sol: np.array\n            The state of the system evaulated at the time point specified. Only used if det_method is set to 'solve_ivp'.\n        ";
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_153integrate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_x0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_t1;
  double __pyx_v_t2;
  Py_ssize_t __pyx_v_steps;
  PyObject *__pyx_v_dense_output = 0;
  PyObject *__pyx_v_max_step = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("integrate (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x0,&__pyx_n_s_t1,&__pyx_n_s_t2,&__pyx_n_s_steps,&__pyx_n_s_dense_output,&__pyx_n_s_max_step,0};
    PyObject* values[6] = {0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_152integrate(struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self, __Pyx_memviewslice __pyx_v_x0, double __pyx_v_t1, double __pyx_v_t2, Py_ssize_t __pyx_v_steps, PyObject *__pyx_v_dense_output, PyObject *__pyx_v_max_step) {
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_7_integrate *__pyx_cur_scope;
  PyObject *__pyx_v_rhs0 = 0;
  PyObject *__pyx_v_time_points = NULL;
  PyObject *__pyx_v_res = NULL;
  PyObject *__pyx_v_y = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("integrate", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pyross_9inference___pyx_scope_struct_7_integrate *)__pyx_tp_new_6pyross_9inference___pyx_scope_struct_7_integrate(__pyx_ptype_6pyross_9inference___pyx_scope_struct_7_integrate, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pyross_9inference___pyx_scope_struct_7_integrate *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 3965, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pyross.inference.SIR_type.integrate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_rhs0);
  __Pyx_XDECREF(__pyx_v_time_points);
  __Pyx_XDECREF(__pyx_v_res);
  __Pyx_XDECREF(__pyx_v_y);
  __PYX_XDEC_MEMVIEW(&__pyx_v_x0, 1);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_obj_6pyross_9inference___pyx_scope_struct_7_integrate {
  PyObject_HEAD
  struct __pyx_obj_6pyross_9inference_SIR_type *__pyx_v_self;
};

+3966:                   dense_output=False, max_step=100000):
    values[4] = ((PyObject *)Py_False);
    values[5] = ((PyObject *)__pyx_int_100000);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x0)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("integrate", 0, 4, 6, 1); __PYX_ERR(0, 3965, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("integrate", 0, 4, 6, 2); __PYX_ERR(0, 3965, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_steps)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("integrate", 0, 4, 6, 3); __PYX_ERR(0, 3965, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dense_output);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_step);
          if (value) { values[5] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "integrate") < 0)) __PYX_ERR(0, 3965, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_x0 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_x0.memview)) __PYX_ERR(0, 3965, __pyx_L3_error)
    __pyx_v_t1 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_t1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3965, __pyx_L3_error)
    __pyx_v_t2 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_t2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3965, __pyx_L3_error)
    __pyx_v_steps = __Pyx_PyIndex_AsSsize_t(values[3]); if (unlikely((__pyx_v_steps == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 3965, __pyx_L3_error)
    __pyx_v_dense_output = values[4];
    __pyx_v_max_step = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("integrate", 0, 4, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3965, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.integrate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_152integrate(((struct __pyx_obj_6pyross_9inference_SIR_type *)__pyx_v_self), __pyx_v_x0, __pyx_v_t1, __pyx_v_t2, __pyx_v_steps, __pyx_v_dense_output, __pyx_v_max_step);
 3967:         """An light weight integrate method similar to `simulate` in pyross.deterministic
 3968: 
 3969:         Parameters
 3970:         ----------
 3971:         x0: np.array
 3972:             Initial state of the given model
 3973:         t1: float
 3974:             Initial time of integrator
 3975:         t2: float
 3976:             Final time of integrator
 3977:         steps: int
 3978:             Number of time steps for numerical integrator evaluation.
 3979:         max_step: int, optional
 3980:             The maximum allowed step size of the integrator.
 3981: 
 3982:         Returns
 3983:         -------
 3984:         sol: np.array
 3985:             The state of the system evaulated at the time point specified. Only used if det_method is set to 'solve_ivp'.
 3986:         """
 3987: 
+3988:         def rhs0(double t, double [:] xt):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_9integrate_1rhs0(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6pyross_9inference_8SIR_type_9integrate_1rhs0 = {"rhs0", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6pyross_9inference_8SIR_type_9integrate_1rhs0, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pyross_9inference_8SIR_type_9integrate_1rhs0(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_t;
  __Pyx_memviewslice __pyx_v_xt = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rhs0 (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t,&__pyx_n_s_xt,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xt)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("rhs0", 1, 2, 2, 1); __PYX_ERR(0, 3988, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rhs0") < 0)) __PYX_ERR(0, 3988, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_t = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_t == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3988, __pyx_L3_error)
    __pyx_v_xt = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xt.memview)) __PYX_ERR(0, 3988, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rhs0", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3988, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR_type.integrate.rhs0", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_8SIR_type_9integrate_rhs0(__pyx_self, __pyx_v_t, __pyx_v_xt);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_8SIR_type_9integrate_rhs0(PyObject *__pyx_self, double __pyx_v_t, __Pyx_memviewslice __pyx_v_xt) {
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_7_integrate *__pyx_cur_scope;
  struct __pyx_obj_6pyross_9inference___pyx_scope_struct_7_integrate *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rhs0", 0);
  __pyx_outer_scope = (struct __pyx_obj_6pyross_9inference___pyx_scope_struct_7_integrate *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyross.inference.SIR_type.integrate.rhs0", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_xt, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__41 = PyTuple_Pack(2, __pyx_n_s_t, __pyx_n_s_xt); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 3988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__41);
  __Pyx_GIVEREF(__pyx_tuple__41);
/* … */
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6pyross_9inference_8SIR_type_9integrate_1rhs0, 0, __pyx_n_s_integrate_locals_rhs0, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pyross_inference, __pyx_d, ((PyObject *)__pyx_codeobj__42)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_rhs0 = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyross_inference_pyx, __pyx_n_s_rhs0_2, 3988, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) __PYX_ERR(0, 3988, __pyx_L1_error)
+3989:             self.det_model.set_contactMatrix(t, self.contactMatrix)
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3989, __pyx_L1_error) }
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_det_model); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_set_contactMatrix); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3989, __pyx_L1_error) }
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_2, __pyx_cur_scope->__pyx_v_self->contactMatrix};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3989, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_2, __pyx_cur_scope->__pyx_v_self->contactMatrix};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3989, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3989, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_t_2);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self->contactMatrix);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self->contactMatrix);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_cur_scope->__pyx_v_self->contactMatrix);
    __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3989, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3990:             self.det_model.rhs(xt, t)
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3990, __pyx_L1_error) }
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_det_model); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3990, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_rhs); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3990, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_xt, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3990, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3990, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3990, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3990, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3990, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_5, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_5, __pyx_t_2);
    __pyx_t_3 = 0;
    __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3990, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3991:             self.integrator_step_count += 1
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3991, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3991, __pyx_L1_error) }
  __pyx_cur_scope->__pyx_v_self->integrator_step_count = (__pyx_cur_scope->__pyx_v_self->integrator_step_count + 1);
+3992:             if self.max_steps_det != 0 and self.integrator_step_count > self.max_steps_det:
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3992, __pyx_L1_error) }
  __pyx_t_9 = ((__pyx_cur_scope->__pyx_v_self->max_steps_det != 0) != 0);
  if (__pyx_t_9) {
  } else {
    __pyx_t_8 = __pyx_t_9;
    goto __pyx_L4_bool_binop_done;
  }
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3992, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3992, __pyx_L1_error) }
  __pyx_t_9 = ((__pyx_cur_scope->__pyx_v_self->integrator_step_count > __pyx_cur_scope->__pyx_v_self->max_steps_det) != 0);
  __pyx_t_8 = __pyx_t_9;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_8)) {
/* … */
  }
+3993:                 raise MaxIntegratorStepsException()
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_MaxIntegratorStepsException); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3993, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3993, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 3993, __pyx_L1_error)
+3994:             return self.det_model.dxdt
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 3994, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_det_model); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3994, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_dxdt); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3994, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_6;
  __pyx_t_6 = 0;
  goto __pyx_L0;
 3995: 
+3996:         x0 = np.multiply(x0, self.Omega)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3996, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_multiply); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3996, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_x0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3996, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_self->Omega); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3996, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3996, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3996, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3996, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_4);
    __pyx_t_2 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3996, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 3996, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __PYX_XDEC_MEMVIEW(&__pyx_v_x0, 1);
  __pyx_v_x0 = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
+3997:         time_points = np.linspace(t1, t2, steps)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_linspace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_t1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_t2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_steps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_3, __pyx_t_4, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3997, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_3, __pyx_t_4, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3997, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3997, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_6, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_6, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_6, __pyx_t_2);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3997, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_time_points = __pyx_t_1;
  __pyx_t_1 = 0;
+3998:         self.integrator_step_count = 0
  __pyx_cur_scope->__pyx_v_self->integrator_step_count = 0;
+3999:         res = solve_ivp(rhs0, [t1,t2], x0, method=self.det_method,
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_solve_ivp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = PyFloat_FromDouble(__pyx_v_t1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_9 = PyFloat_FromDouble(__pyx_v_t2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_7);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_9);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_t_9);
  __pyx_t_7 = 0;
  __pyx_t_9 = 0;
  __pyx_t_9 = __pyx_memoryview_fromslice(__pyx_v_x0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_INCREF(__pyx_v_rhs0);
  __Pyx_GIVEREF(__pyx_v_rhs0);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_rhs0);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_9);
  __pyx_t_2 = 0;
  __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_method, __pyx_cur_scope->__pyx_v_self->det_method) < 0) __PYX_ERR(0, 3999, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_res = __pyx_t_2;
  __pyx_t_2 = 0;
+4000:                         t_eval=time_points, dense_output=dense_output,
  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_t_eval, __pyx_v_time_points) < 0) __PYX_ERR(0, 3999, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dense_output, __pyx_v_dense_output) < 0) __PYX_ERR(0, 3999, __pyx_L1_error)
+4001:                         max_step=max_step, rtol=self.rtol_det)
  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_max_step, __pyx_v_max_step) < 0) __PYX_ERR(0, 3999, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_self->rtol_det); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4001, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_rtol, __pyx_t_2) < 0) __PYX_ERR(0, 3999, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+4002:         y = np.divide(res.y.T, self.Omega)
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_divide); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_res, __pyx_n_s_y); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_T); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_v_self->Omega); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_4 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_1, __pyx_t_9};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4002, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_1, __pyx_t_9};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4002, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  } else
  #endif
  {
    __pyx_t_3 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4002, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_6, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_6, __pyx_t_9);
    __pyx_t_1 = 0;
    __pyx_t_9 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4002, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_y = __pyx_t_2;
  __pyx_t_2 = 0;
 4003: 
+4004:         if dense_output:
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_dense_output); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 4004, __pyx_L1_error)
  if (__pyx_t_10) {
/* … */
  }
+4005:             return y, res.sol
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_res, __pyx_n_s_sol); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4005, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4005, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_v_y);
    __Pyx_GIVEREF(__pyx_v_y);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_y);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_r = __pyx_t_7;
    __pyx_t_7 = 0;
    goto __pyx_L0;
 4006:         else:
+4007:             return y
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_y);
    __pyx_r = __pyx_v_y;
    goto __pyx_L0;
  }
 4008: 
 4009: 
 4010: @cython.wraparound(False)
 4011: @cython.boundscheck(False)
 4012: @cython.cdivision(True)
 4013: @cython.nonecheck(False)
+4014: cdef class SIR(SIR_type):
struct __pyx_obj_6pyross_9inference_SIR {
  struct __pyx_obj_6pyross_9inference_SIR_type __pyx_base;
  struct __pyx_obj_6pyross_13deterministic_SIR *det_model;
};
/* … */
struct __pyx_vtabstruct_6pyross_9inference_SIR {
  struct __pyx_vtabstruct_6pyross_9inference_SIR_type __pyx_base;
  PyObject *(*fill_lambdas)(struct __pyx_obj_6pyross_9inference_SIR *, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice);
  PyObject *(*jacobian)(struct __pyx_obj_6pyross_9inference_SIR *, __Pyx_memviewslice, __Pyx_memviewslice);
  PyObject *(*noise_correlation)(struct __pyx_obj_6pyross_9inference_SIR *, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice);
};
static struct __pyx_vtabstruct_6pyross_9inference_SIR *__pyx_vtabptr_6pyross_9inference_SIR;

 4015:     """
 4016:     Susceptible, Infected, Removed (SIR)
 4017: 
 4018:     * Ia: asymptomatic
 4019:     * Is: symptomatic
 4020: 
 4021:     To initialise the SIR class,
 4022: 
 4023:     Parameters
 4024:     ----------
 4025:     parameters: dict
 4026:         Contains the following keys:
 4027: 
 4028:         alpha: float
 4029:             Ratio of asymptomatic carriers
 4030:         beta: float
 4031:             Infection rate upon contact
 4032:         gIa: float
 4033:             Recovery rate for asymptomatic
 4034:         gIs: float
 4035:             Recovery rate for symptomatic
 4036:         fsa: float
 4037:             Fraction by which symptomatic individuals do not self-isolate.
 4038:     M: int
 4039:         Number of age groups
 4040:     fi: float numpy.array
 4041:         Number of people in each age group divided by Omega.
 4042:     Omega: float, optional
 4043:         System size parameter, e.g. total population. Default to 1.
 4044:     steps: int, optional
 4045:         The number of internal integration steps performed between the observed points (not used in tangent space inference).
 4046:         For robustness, set steps to be large, lyapunov_method='LSODA'.
 4047:         For speed, set steps to be small (~4), lyapunov_method='euler'.
 4048:         For a combination of the two, choose something in between.
 4049:     det_method: str, optional
 4050:         The integration method used for deterministic integration.
 4051:         Choose one of 'LSODA' and 'RK45'. Default is 'LSODA'.
 4052:     lyapunov_method: str, optional
 4053:         The integration method used for the integration of the Lyapunov equation for the covariance.
 4054:         Choose one of 'LSODA', 'RK45', 'RK2', 'RK4' and 'euler'. Default is 'LSODA'.
 4055:     rtol_det: float, optional
 4056:         relative tolerance for the deterministic integrator (default 1e-4)
 4057:     rtol_lyapunov: float, optional
 4058:         relative tolerance for the Lyapunov-type integrator (default 1e-3)
 4059:     max_steps_det: int, optional
 4060:         Maximum number of integration steps (total) for the deterministic integrator. Default: unlimited (represented as 0). 
 4061:         Parameters for which the integrator reaches max_steps_det are disregarded by the optimiser.
 4062:     max_steps_lyapunov: int, optional
 4063:         Maximum number of integration steps (total) for the Lyapunov-type integrator. Default: unlimited (represented as 0)
 4064:         Parameters for which the integrator reaches max_steps_lyapunov are disregarded by the optimiser.
 4065:     
 4066:     """
+4067:     cdef readonly pyross.deterministic.SIR det_model
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_3SIR_9det_model_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_3SIR_9det_model_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_3SIR_9det_model___get__(((struct __pyx_obj_6pyross_9inference_SIR *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_3SIR_9det_model___get__(struct __pyx_obj_6pyross_9inference_SIR *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->det_model));
  __pyx_r = ((PyObject *)__pyx_v_self->det_model);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4068: 
+4069:     def __init__(self, parameters, M, fi, Omega=1, steps=4, det_method='LSODA', lyapunov_method='LSODA', rtol_det=1e-4, rtol_lyapunov=1e-3, max_steps_det=0, max_steps_lyapunov=0):
/* Python wrapper */
static int __pyx_pw_6pyross_9inference_3SIR_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6pyross_9inference_3SIR_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_parameters = 0;
  PyObject *__pyx_v_M = 0;
  PyObject *__pyx_v_fi = 0;
  PyObject *__pyx_v_Omega = 0;
  PyObject *__pyx_v_steps = 0;
  PyObject *__pyx_v_det_method = 0;
  PyObject *__pyx_v_lyapunov_method = 0;
  PyObject *__pyx_v_rtol_det = 0;
  PyObject *__pyx_v_rtol_lyapunov = 0;
  PyObject *__pyx_v_max_steps_det = 0;
  PyObject *__pyx_v_max_steps_lyapunov = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_parameters,&__pyx_n_s_M,&__pyx_n_s_fi,&__pyx_n_s_Omega,&__pyx_n_s_steps,&__pyx_n_s_det_method,&__pyx_n_s_lyapunov_method,&__pyx_n_s_rtol_det,&__pyx_n_s_rtol_lyapunov,&__pyx_n_s_max_steps_det,&__pyx_n_s_max_steps_lyapunov,0};
    PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0};
    values[3] = ((PyObject *)__pyx_int_1);
    values[4] = ((PyObject *)__pyx_int_4);
    values[5] = ((PyObject *)__pyx_n_u_LSODA);
    values[6] = ((PyObject *)__pyx_n_u_LSODA);
    values[7] = ((PyObject *)__pyx_float_1eneg_4);
    values[8] = ((PyObject *)__pyx_float_1eneg_3);
    values[9] = ((PyObject *)__pyx_int_0);
    values[10] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_parameters)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, 1); __PYX_ERR(0, 4069, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fi)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, 2); __PYX_ERR(0, 4069, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Omega);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_steps);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_det_method);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lyapunov_method);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol_det);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol_lyapunov);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps_det);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps_lyapunov);
          if (value) { values[10] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 4069, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_parameters = values[0];
    __pyx_v_M = values[1];
    __pyx_v_fi = values[2];
    __pyx_v_Omega = values[3];
    __pyx_v_steps = values[4];
    __pyx_v_det_method = values[5];
    __pyx_v_lyapunov_method = values[6];
    __pyx_v_rtol_det = values[7];
    __pyx_v_rtol_lyapunov = values[8];
    __pyx_v_max_steps_det = values[9];
    __pyx_v_max_steps_lyapunov = values[10];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4069, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SIR.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_3SIR___init__(((struct __pyx_obj_6pyross_9inference_SIR *)__pyx_v_self), __pyx_v_parameters, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6pyross_9inference_3SIR___init__(struct __pyx_obj_6pyross_9inference_SIR *__pyx_v_self, PyObject *__pyx_v_parameters, PyObject *__pyx_v_M, PyObject *__pyx_v_fi, PyObject *__pyx_v_Omega, PyObject *__pyx_v_steps, PyObject *__pyx_v_det_method, PyObject *__pyx_v_lyapunov_method, PyObject *__pyx_v_rtol_det, PyObject *__pyx_v_rtol_lyapunov, PyObject *__pyx_v_max_steps_det, PyObject *__pyx_v_max_steps_lyapunov) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pyross.inference.SIR.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4070:         self.param_keys = ['alpha', 'beta', 'gIa', 'gIs', 'fsa']
  __pyx_t_1 = PyList_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4070, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_u_alpha);
  __Pyx_GIVEREF(__pyx_n_u_alpha);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_alpha);
  __Pyx_INCREF(__pyx_n_u_beta);
  __Pyx_GIVEREF(__pyx_n_u_beta);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_u_beta);
  __Pyx_INCREF(__pyx_n_u_gIa);
  __Pyx_GIVEREF(__pyx_n_u_gIa);
  PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_u_gIa);
  __Pyx_INCREF(__pyx_n_u_gIs);
  __Pyx_GIVEREF(__pyx_n_u_gIs);
  PyList_SET_ITEM(__pyx_t_1, 3, __pyx_n_u_gIs);
  __Pyx_INCREF(__pyx_n_u_fsa);
  __Pyx_GIVEREF(__pyx_n_u_fsa);
  PyList_SET_ITEM(__pyx_t_1, 4, __pyx_n_u_fsa);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.param_keys);
  __Pyx_DECREF(__pyx_v_self->__pyx_base.param_keys);
  __pyx_v_self->__pyx_base.param_keys = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4071:         super().__init__(parameters, 3, M, fi, Omega, steps, det_method, lyapunov_method, rtol_det, rtol_lyapunov, max_steps_det, max_steps_lyapunov)
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6pyross_9inference_SIR));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6pyross_9inference_SIR));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_ptype_6pyross_9inference_SIR));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self));
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[13] = {__pyx_t_3, __pyx_v_parameters, __pyx_int_3, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 12+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4071, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[13] = {__pyx_t_3, __pyx_v_parameters, __pyx_int_3, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 12+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4071, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(12+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4071, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_parameters);
    __Pyx_GIVEREF(__pyx_v_parameters);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_parameters);
    __Pyx_INCREF(__pyx_int_3);
    __Pyx_GIVEREF(__pyx_int_3);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_int_3);
    __Pyx_INCREF(__pyx_v_M);
    __Pyx_GIVEREF(__pyx_v_M);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_M);
    __Pyx_INCREF(__pyx_v_fi);
    __Pyx_GIVEREF(__pyx_v_fi);
    PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_v_fi);
    __Pyx_INCREF(__pyx_v_Omega);
    __Pyx_GIVEREF(__pyx_v_Omega);
    PyTuple_SET_ITEM(__pyx_t_5, 4+__pyx_t_4, __pyx_v_Omega);
    __Pyx_INCREF(__pyx_v_steps);
    __Pyx_GIVEREF(__pyx_v_steps);
    PyTuple_SET_ITEM(__pyx_t_5, 5+__pyx_t_4, __pyx_v_steps);
    __Pyx_INCREF(__pyx_v_det_method);
    __Pyx_GIVEREF(__pyx_v_det_method);
    PyTuple_SET_ITEM(__pyx_t_5, 6+__pyx_t_4, __pyx_v_det_method);
    __Pyx_INCREF(__pyx_v_lyapunov_method);
    __Pyx_GIVEREF(__pyx_v_lyapunov_method);
    PyTuple_SET_ITEM(__pyx_t_5, 7+__pyx_t_4, __pyx_v_lyapunov_method);
    __Pyx_INCREF(__pyx_v_rtol_det);
    __Pyx_GIVEREF(__pyx_v_rtol_det);
    PyTuple_SET_ITEM(__pyx_t_5, 8+__pyx_t_4, __pyx_v_rtol_det);
    __Pyx_INCREF(__pyx_v_rtol_lyapunov);
    __Pyx_GIVEREF(__pyx_v_rtol_lyapunov);
    PyTuple_SET_ITEM(__pyx_t_5, 9+__pyx_t_4, __pyx_v_rtol_lyapunov);
    __Pyx_INCREF(__pyx_v_max_steps_det);
    __Pyx_GIVEREF(__pyx_v_max_steps_det);
    PyTuple_SET_ITEM(__pyx_t_5, 10+__pyx_t_4, __pyx_v_max_steps_det);
    __Pyx_INCREF(__pyx_v_max_steps_lyapunov);
    __Pyx_GIVEREF(__pyx_v_max_steps_lyapunov);
    PyTuple_SET_ITEM(__pyx_t_5, 11+__pyx_t_4, __pyx_v_max_steps_lyapunov);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4071, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4072:         self.class_index_dict = {'S':0, 'Ia':1, 'Is':2}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4072, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_S, __pyx_int_0) < 0) __PYX_ERR(0, 4072, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_Ia, __pyx_int_1) < 0) __PYX_ERR(0, 4072, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_Is, __pyx_int_2) < 0) __PYX_ERR(0, 4072, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.class_index_dict);
  __Pyx_DECREF(__pyx_v_self->__pyx_base.class_index_dict);
  __pyx_v_self->__pyx_base.class_index_dict = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4073:         self.set_det_model(parameters)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_det_model); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_parameters);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4074: 
+4075:     def set_det_model(self, parameters):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_3SIR_3set_det_model(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_3SIR_3set_det_model(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_det_model (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_3SIR_2set_det_model(((struct __pyx_obj_6pyross_9inference_SIR *)__pyx_v_self), ((PyObject *)__pyx_v_parameters));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_3SIR_2set_det_model(struct __pyx_obj_6pyross_9inference_SIR *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_det_model", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyross.inference.SIR.set_det_model", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4076:         self.det_model = pyross.deterministic.SIR(parameters, self.M, self.fi*self.Omega)
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.Omega); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyNumber_Multiply(((PyObject *)__pyx_v_self->__pyx_base.fi), __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_parameters);
  __Pyx_GIVEREF(__pyx_v_parameters);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_parameters);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6pyross_13deterministic_SIR), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->det_model);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->det_model));
  __pyx_v_self->det_model = ((struct __pyx_obj_6pyross_13deterministic_SIR *)__pyx_t_3);
  __pyx_t_3 = 0;
 4077: 
+4078:     def infection_indices(self):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_3SIR_5infection_indices(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_3SIR_5infection_indices(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infection_indices (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_3SIR_4infection_indices(((struct __pyx_obj_6pyross_9inference_SIR *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_3SIR_4infection_indices(CYTHON_UNUSED struct __pyx_obj_6pyross_9inference_SIR *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infection_indices", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR.infection_indices", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4079:         return [1, 2]
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_int_1);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_int_2);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4080: 
+4081:     def make_params_dict(self):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_3SIR_7make_params_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_3SIR_7make_params_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_params_dict (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_3SIR_6make_params_dict(((struct __pyx_obj_6pyross_9inference_SIR *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_3SIR_6make_params_dict(struct __pyx_obj_6pyross_9inference_SIR *__pyx_v_self) {
  PyObject *__pyx_v_parameters = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_params_dict", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SIR.make_params_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_parameters);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4082:         parameters = {'alpha':self.alpha, 'beta':self.beta, 'gIa':self.gIa, 'gIs':self.gIs, 'fsa':self.fsa}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_alpha, ((PyObject *)__pyx_v_self->__pyx_base.alpha)) < 0) __PYX_ERR(0, 4082, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_beta, ((PyObject *)__pyx_v_self->__pyx_base.beta)) < 0) __PYX_ERR(0, 4082, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_gIa, ((PyObject *)__pyx_v_self->__pyx_base.gIa)) < 0) __PYX_ERR(0, 4082, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_gIs, ((PyObject *)__pyx_v_self->__pyx_base.gIs)) < 0) __PYX_ERR(0, 4082, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_fsa, ((PyObject *)__pyx_v_self->__pyx_base.fsa)) < 0) __PYX_ERR(0, 4082, __pyx_L1_error)
  __pyx_v_parameters = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4083:         return parameters
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_parameters);
  __pyx_r = __pyx_v_parameters;
  goto __pyx_L0;
 4084: 
+4085:     cdef compute_jacobian_and_b_matrix(self, double [:] x, double t,
static PyObject *__pyx_f_6pyross_9inference_3SIR_compute_jacobian_and_b_matrix(struct __pyx_obj_6pyross_9inference_SIR *__pyx_v_self, __Pyx_memviewslice __pyx_v_x, double __pyx_v_t, struct __pyx_opt_args_6pyross_9inference_3SIR_compute_jacobian_and_b_matrix *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyross.inference.SIR.compute_jacobian_and_b_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_s, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Ia, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Is, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_l, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_6pyross_9inference_3SIR_compute_jacobian_and_b_matrix {
  int __pyx_n;
  PyObject *b_matrix;
  PyObject *jacobian;
};
+4086:                                                 b_matrix=True, jacobian=False):
  PyObject *__pyx_v_b_matrix = ((PyObject *)Py_True);
  PyObject *__pyx_v_jacobian = ((PyObject *)Py_False);
  __Pyx_memviewslice __pyx_v_s = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Ia = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Is = { 0, 0, { 0 }, { 0 }, { 0 } };
  Py_ssize_t __pyx_v_M;
  __Pyx_memviewslice __pyx_v_l = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("compute_jacobian_and_b_matrix", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_b_matrix = __pyx_optional_args->b_matrix;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_jacobian = __pyx_optional_args->jacobian;
      }
    }
  }
 4087:         cdef:
 4088:             double [:] s, Ia, Is
+4089:             Py_ssize_t M=self.M
  __pyx_t_1 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_1;
+4090:         s = x[0:M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    0,
    __pyx_v_M,
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4090, __pyx_L1_error)
}

__pyx_v_s = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4091:         Ia = x[M:2*M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    __pyx_v_M,
    (2 * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4091, __pyx_L1_error)
}

__pyx_v_Ia = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4092:         Is = x[2*M:3*M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    (2 * __pyx_v_M),
    (3 * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4092, __pyx_L1_error)
}

__pyx_v_Is = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4093:         self.CM = self.contactMatrix(t)
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_t); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4093, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_self->__pyx_base.contactMatrix);
  __pyx_t_6 = __pyx_v_self->__pyx_base.contactMatrix; __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4093, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4093, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.CM);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.CM));
  __pyx_v_self->__pyx_base.CM = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
+4094:         cdef double [:] l=np.zeros((M), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4094, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4094, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4094, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4094, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4094, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4094, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 4094, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4094, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4094, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_l = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4095:         self.fill_lambdas(Ia, Is, l)
  __pyx_t_7 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR *)__pyx_v_self->__pyx_base.__pyx_vtab)->fill_lambdas(__pyx_v_self, __pyx_v_Ia, __pyx_v_Is, __pyx_v_l); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4095, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4096:         if b_matrix:
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_b_matrix); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4096, __pyx_L1_error)
  if (__pyx_t_8) {
/* … */
  }
+4097:             self.noise_correlation(s, Ia, Is, l)
    __pyx_t_7 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR *)__pyx_v_self->__pyx_base.__pyx_vtab)->noise_correlation(__pyx_v_self, __pyx_v_s, __pyx_v_Ia, __pyx_v_Is, __pyx_v_l); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4097, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4098:         if jacobian:
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_jacobian); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4098, __pyx_L1_error)
  if (__pyx_t_8) {
/* … */
  }
+4099:             self.jacobian(s, l)
    __pyx_t_7 = ((struct __pyx_vtabstruct_6pyross_9inference_SIR *)__pyx_v_self->__pyx_base.__pyx_vtab)->jacobian(__pyx_v_self, __pyx_v_s, __pyx_v_l); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4099, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 4100: 
+4101:     cdef fill_lambdas(self, double [:] Ia, double [:] Is, double [:] l):
static PyObject *__pyx_f_6pyross_9inference_3SIR_fill_lambdas(struct __pyx_obj_6pyross_9inference_SIR *__pyx_v_self, __Pyx_memviewslice __pyx_v_Ia, __Pyx_memviewslice __pyx_v_Is, __Pyx_memviewslice __pyx_v_l) {
  __Pyx_memviewslice __pyx_v_CM = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fsa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_beta = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fi = { 0, 0, { 0 }, { 0 }, { 0 } };
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_n;
  Py_ssize_t __pyx_v_M;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fill_lambdas", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_AddTraceback("pyross.inference.SIR.fill_lambdas", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_CM, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fsa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_beta, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fi, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4102:         cdef:
+4103:             double [:, :] CM=self.CM
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(((PyObject *)__pyx_v_self->__pyx_base.CM), PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 4103, __pyx_L1_error)
  __pyx_v_CM = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+4104:             double [:] fsa=self.fsa, beta=self.beta
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fsa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4104, __pyx_L1_error)
  __pyx_v_fsa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.beta), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4104, __pyx_L1_error)
  __pyx_v_beta = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4105:             double [:] fi=self.fi
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fi), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4105, __pyx_L1_error)
  __pyx_v_fi = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4106:             Py_ssize_t m, n, M=self.M
  __pyx_t_3 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_3;
+4107:         for m in range(M):
  __pyx_t_3 = __pyx_v_M;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_m = __pyx_t_5;
+4108:             for n in range(M):
    __pyx_t_6 = __pyx_v_M;
    __pyx_t_7 = __pyx_t_6;
    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
      __pyx_v_n = __pyx_t_8;
+4109:                 l[m] += beta[m]*CM[m,n]*(Ia[n]+fsa[n]*Is[n])/fi[n]
      __pyx_t_9 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_n;
      __pyx_t_12 = __pyx_v_n;
      __pyx_t_13 = __pyx_v_n;
      __pyx_t_14 = __pyx_v_n;
      __pyx_t_15 = __pyx_v_n;
      __pyx_t_16 = __pyx_v_m;
      *((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_16 * __pyx_v_l.strides[0]) )) += ((((*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_9 * __pyx_v_beta.strides[0]) ))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_10 * __pyx_v_CM.strides[0]) ) + __pyx_t_11 * __pyx_v_CM.strides[1]) )))) * ((*((double *) ( /* dim=0 */ (__pyx_v_Ia.data + __pyx_t_12 * __pyx_v_Ia.strides[0]) ))) + ((*((double *) ( /* dim=0 */ (__pyx_v_fsa.data + __pyx_t_13 * __pyx_v_fsa.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_14 * __pyx_v_Is.strides[0]) )))))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_15 * __pyx_v_fi.strides[0]) ))));
    }
  }
 4110: 
+4111:     cdef jacobian(self, double [:] s, double [:] l):
static PyObject *__pyx_f_6pyross_9inference_3SIR_jacobian(struct __pyx_obj_6pyross_9inference_SIR *__pyx_v_self, __Pyx_memviewslice __pyx_v_s, __Pyx_memviewslice __pyx_v_l) {
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_n;
  Py_ssize_t __pyx_v_M;
  Py_ssize_t __pyx_v_dim;
  __Pyx_memviewslice __pyx_v_gIa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gIs = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fsa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_beta = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_alpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_balpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fi = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_J = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_CM = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("jacobian", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_AddTraceback("pyross.inference.SIR.jacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIs, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fsa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_beta, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_alpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_balpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fi, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_J, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_CM, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4112:         cdef:
+4113:             Py_ssize_t m, n, M=self.M, dim=self.dim
  __pyx_t_1 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_1;
  __pyx_t_1 = __pyx_v_self->__pyx_base.dim;
  __pyx_v_dim = __pyx_t_1;
+4114:             double [:] gIa=self.gIa, gIs=self.gIs, fsa=self.fsa, beta=self.beta
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4114, __pyx_L1_error)
  __pyx_v_gIa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIs), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4114, __pyx_L1_error)
  __pyx_v_gIs = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fsa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4114, __pyx_L1_error)
  __pyx_v_fsa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.beta), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4114, __pyx_L1_error)
  __pyx_v_beta = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4115:             double [:] alpha=self.alpha, balpha=1-self.alpha, fi=self.fi
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.alpha), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4115, __pyx_L1_error)
  __pyx_v_alpha = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_3 = PyNumber_Subtract(__pyx_int_1, ((PyObject *)__pyx_v_self->__pyx_base.alpha)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4115, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_balpha = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fi), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4115, __pyx_L1_error)
  __pyx_v_fi = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4116:             double [:, :, :, :] J = self.J
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(((PyObject *)__pyx_v_self->__pyx_base.J), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 4116, __pyx_L1_error)
  __pyx_v_J = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
+4117:             double [:, :] CM=self.CM
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(((PyObject *)__pyx_v_self->__pyx_base.CM), PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 4117, __pyx_L1_error)
  __pyx_v_CM = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+4118:         for m in range(M):
  __pyx_t_1 = __pyx_v_M;
  __pyx_t_6 = __pyx_t_1;
  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
    __pyx_v_m = __pyx_t_7;
+4119:             J[0, m, 0, m] = -l[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = 0;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_11 = 0;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_9 * __pyx_v_J.strides[0]) ) + __pyx_t_10 * __pyx_v_J.strides[1]) ) + __pyx_t_11 * __pyx_v_J.strides[2]) ) + __pyx_t_12 * __pyx_v_J.strides[3]) )) = (-(*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_8 * __pyx_v_l.strides[0]) ))));
+4120:             J[1, m, 0, m] = alpha[m]*l[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_11 = 1;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_9 = 0;
    __pyx_t_13 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_11 * __pyx_v_J.strides[0]) ) + __pyx_t_10 * __pyx_v_J.strides[1]) ) + __pyx_t_9 * __pyx_v_J.strides[2]) ) + __pyx_t_13 * __pyx_v_J.strides[3]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_8 * __pyx_v_alpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_12 * __pyx_v_l.strides[0]) ))));
+4121:             J[2, m, 0, m] = balpha[m]*l[m]
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_13 = 2;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_10 = 0;
    __pyx_t_11 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_13 * __pyx_v_J.strides[0]) ) + __pyx_t_9 * __pyx_v_J.strides[1]) ) + __pyx_t_10 * __pyx_v_J.strides[2]) ) + __pyx_t_11 * __pyx_v_J.strides[3]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_balpha.data + __pyx_t_12 * __pyx_v_balpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_8 * __pyx_v_l.strides[0]) ))));
+4122:             for n in range(M):
    __pyx_t_14 = __pyx_v_M;
    __pyx_t_15 = __pyx_t_14;
    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
      __pyx_v_n = __pyx_t_16;
+4123:                 J[0, m, 1, n] = -s[m]*beta[m]*CM[m, n]/fi[n]
      __pyx_t_8 = __pyx_v_m;
      __pyx_t_12 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_n;
      __pyx_t_9 = __pyx_v_n;
      __pyx_t_13 = 0;
      __pyx_t_17 = __pyx_v_m;
      __pyx_t_18 = 1;
      __pyx_t_19 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_13 * __pyx_v_J.strides[0]) ) + __pyx_t_17 * __pyx_v_J.strides[1]) ) + __pyx_t_18 * __pyx_v_J.strides[2]) ) + __pyx_t_19 * __pyx_v_J.strides[3]) )) = ((((-(*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_8 * __pyx_v_s.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_12 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_11 * __pyx_v_CM.strides[0]) ) + __pyx_t_10 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_9 * __pyx_v_fi.strides[0]) ))));
+4124:                 J[0, m, 2, n] = -s[m]*beta[m]*CM[m, n]*fsa[n]/fi[n]
      __pyx_t_9 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_m;
      __pyx_t_12 = __pyx_v_n;
      __pyx_t_8 = __pyx_v_n;
      __pyx_t_19 = __pyx_v_n;
      __pyx_t_18 = 0;
      __pyx_t_17 = __pyx_v_m;
      __pyx_t_13 = 2;
      __pyx_t_20 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_18 * __pyx_v_J.strides[0]) ) + __pyx_t_17 * __pyx_v_J.strides[1]) ) + __pyx_t_13 * __pyx_v_J.strides[2]) ) + __pyx_t_20 * __pyx_v_J.strides[3]) )) = (((((-(*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_9 * __pyx_v_s.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_10 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_11 * __pyx_v_CM.strides[0]) ) + __pyx_t_12 * __pyx_v_CM.strides[1]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_fsa.data + __pyx_t_8 * __pyx_v_fsa.strides[0]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_19 * __pyx_v_fi.strides[0]) ))));
+4125:                 J[1, m, 1, n] = alpha[m]*s[m]*beta[m]*CM[m, n]/fi[n]
      __pyx_t_19 = __pyx_v_m;
      __pyx_t_8 = __pyx_v_m;
      __pyx_t_12 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_n;
      __pyx_t_9 = __pyx_v_n;
      __pyx_t_20 = 1;
      __pyx_t_13 = __pyx_v_m;
      __pyx_t_17 = 1;
      __pyx_t_18 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_20 * __pyx_v_J.strides[0]) ) + __pyx_t_13 * __pyx_v_J.strides[1]) ) + __pyx_t_17 * __pyx_v_J.strides[2]) ) + __pyx_t_18 * __pyx_v_J.strides[3]) )) = (((((*((double *) ( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_19 * __pyx_v_alpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_8 * __pyx_v_s.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_12 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_11 * __pyx_v_CM.strides[0]) ) + __pyx_t_10 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_9 * __pyx_v_fi.strides[0]) ))));
+4126:                 J[1, m, 2, n] = alpha[m]*s[m]*beta[m]*CM[m, n]*fsa[n]/fi[n]
      __pyx_t_9 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_m;
      __pyx_t_12 = __pyx_v_m;
      __pyx_t_8 = __pyx_v_n;
      __pyx_t_19 = __pyx_v_n;
      __pyx_t_18 = __pyx_v_n;
      __pyx_t_17 = 1;
      __pyx_t_13 = __pyx_v_m;
      __pyx_t_20 = 2;
      __pyx_t_21 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_17 * __pyx_v_J.strides[0]) ) + __pyx_t_13 * __pyx_v_J.strides[1]) ) + __pyx_t_20 * __pyx_v_J.strides[2]) ) + __pyx_t_21 * __pyx_v_J.strides[3]) )) = ((((((*((double *) ( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_9 * __pyx_v_alpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_10 * __pyx_v_s.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_11 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_12 * __pyx_v_CM.strides[0]) ) + __pyx_t_8 * __pyx_v_CM.strides[1]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_fsa.data + __pyx_t_19 * __pyx_v_fsa.strides[0]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_18 * __pyx_v_fi.strides[0]) ))));
+4127:                 J[2, m, 1, n] = balpha[m]*s[m]*beta[m]*CM[m, n]/fi[n]
      __pyx_t_18 = __pyx_v_m;
      __pyx_t_19 = __pyx_v_m;
      __pyx_t_8 = __pyx_v_m;
      __pyx_t_12 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_n;
      __pyx_t_10 = __pyx_v_n;
      __pyx_t_9 = 2;
      __pyx_t_21 = __pyx_v_m;
      __pyx_t_20 = 1;
      __pyx_t_13 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_9 * __pyx_v_J.strides[0]) ) + __pyx_t_21 * __pyx_v_J.strides[1]) ) + __pyx_t_20 * __pyx_v_J.strides[2]) ) + __pyx_t_13 * __pyx_v_J.strides[3]) )) = (((((*((double *) ( /* dim=0 */ (__pyx_v_balpha.data + __pyx_t_18 * __pyx_v_balpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_19 * __pyx_v_s.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_8 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_12 * __pyx_v_CM.strides[0]) ) + __pyx_t_11 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_10 * __pyx_v_fi.strides[0]) ))));
+4128:                 J[2, m, 2, n] = balpha[m]*s[m]*beta[m]*CM[m, n]*fsa[n]/fi[n]
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_m;
      __pyx_t_12 = __pyx_v_m;
      __pyx_t_8 = __pyx_v_m;
      __pyx_t_19 = __pyx_v_n;
      __pyx_t_18 = __pyx_v_n;
      __pyx_t_13 = __pyx_v_n;
      __pyx_t_20 = 2;
      __pyx_t_21 = __pyx_v_m;
      __pyx_t_9 = 2;
      __pyx_t_17 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_20 * __pyx_v_J.strides[0]) ) + __pyx_t_21 * __pyx_v_J.strides[1]) ) + __pyx_t_9 * __pyx_v_J.strides[2]) ) + __pyx_t_17 * __pyx_v_J.strides[3]) )) = ((((((*((double *) ( /* dim=0 */ (__pyx_v_balpha.data + __pyx_t_10 * __pyx_v_balpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_11 * __pyx_v_s.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_12 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_8 * __pyx_v_CM.strides[0]) ) + __pyx_t_19 * __pyx_v_CM.strides[1]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_fsa.data + __pyx_t_18 * __pyx_v_fsa.strides[0]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_13 * __pyx_v_fi.strides[0]) ))));
    }
+4129:             J[1, m, 1, m] -= gIa[m]
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_18 = 1;
    __pyx_t_19 = __pyx_v_m;
    __pyx_t_8 = 1;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_18 * __pyx_v_J.strides[0]) ) + __pyx_t_19 * __pyx_v_J.strides[1]) ) + __pyx_t_8 * __pyx_v_J.strides[2]) ) + __pyx_t_12 * __pyx_v_J.strides[3]) )) -= (*((double *) ( /* dim=0 */ (__pyx_v_gIa.data + __pyx_t_13 * __pyx_v_gIa.strides[0]) )));
+4130:             J[2, m, 2, m] -= gIs[m]
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_12 = 2;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_19 = 2;
    __pyx_t_18 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_12 * __pyx_v_J.strides[0]) ) + __pyx_t_8 * __pyx_v_J.strides[1]) ) + __pyx_t_19 * __pyx_v_J.strides[2]) ) + __pyx_t_18 * __pyx_v_J.strides[3]) )) -= (*((double *) ( /* dim=0 */ (__pyx_v_gIs.data + __pyx_t_13 * __pyx_v_gIs.strides[0]) )));
  }
+4131:         self.J_mat = self.J.reshape((dim, dim))
  __pyx_t_22 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.J), __pyx_n_s_reshape); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __pyx_t_23 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 4131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_23);
  __pyx_t_24 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 4131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_24);
  __pyx_t_25 = PyTuple_New(2); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 4131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_GIVEREF(__pyx_t_23);
  PyTuple_SET_ITEM(__pyx_t_25, 0, __pyx_t_23);
  __Pyx_GIVEREF(__pyx_t_24);
  PyTuple_SET_ITEM(__pyx_t_25, 1, __pyx_t_24);
  __pyx_t_23 = 0;
  __pyx_t_24 = 0;
  __pyx_t_24 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_22))) {
    __pyx_t_24 = PyMethod_GET_SELF(__pyx_t_22);
    if (likely(__pyx_t_24)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_22);
      __Pyx_INCREF(__pyx_t_24);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_22, function);
    }
  }
  __pyx_t_3 = (__pyx_t_24) ? __Pyx_PyObject_Call2Args(__pyx_t_22, __pyx_t_24, __pyx_t_25) : __Pyx_PyObject_CallOneArg(__pyx_t_22, __pyx_t_25);
  __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4131, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.J_mat);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.J_mat));
  __pyx_v_self->__pyx_base.J_mat = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
 4132: 
+4133:     cdef noise_correlation(self, double [:] s, double [:] Ia, double [:] Is, double [:] l):
static PyObject *__pyx_f_6pyross_9inference_3SIR_noise_correlation(struct __pyx_obj_6pyross_9inference_SIR *__pyx_v_self, __Pyx_memviewslice __pyx_v_s, __Pyx_memviewslice __pyx_v_Ia, __Pyx_memviewslice __pyx_v_Is, __Pyx_memviewslice __pyx_v_l) {
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_M;
  __Pyx_memviewslice __pyx_v_gIa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gIs = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_alpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_balpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_B = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("noise_correlation", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_AddTraceback("pyross.inference.SIR.noise_correlation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIs, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_alpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_balpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_B, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4134:         cdef:
+4135:             Py_ssize_t m, M=self.M
  __pyx_t_1 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_1;
+4136:             double [:] gIa=self.gIa, gIs=self.gIs
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4136, __pyx_L1_error)
  __pyx_v_gIa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIs), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4136, __pyx_L1_error)
  __pyx_v_gIs = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4137:             double [:] alpha=self.alpha, balpha=1-self.alpha
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.alpha), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4137, __pyx_L1_error)
  __pyx_v_alpha = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_3 = PyNumber_Subtract(__pyx_int_1, ((PyObject *)__pyx_v_self->__pyx_base.alpha)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4137, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_balpha = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4138:             double [:, :, :, :] B = self.B
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(((PyObject *)__pyx_v_self->__pyx_base.B), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 4138, __pyx_L1_error)
  __pyx_v_B = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
+4139:         for m in range(M): # only fill in the upper triangular form
  __pyx_t_1 = __pyx_v_M;
  __pyx_t_5 = __pyx_t_1;
  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
    __pyx_v_m = __pyx_t_6;
+4140:             B[0, m, 0, m] = l[m]*s[m]
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = 0;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_11 = 0;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_9 * __pyx_v_B.strides[0]) ) + __pyx_t_10 * __pyx_v_B.strides[1]) ) + __pyx_t_11 * __pyx_v_B.strides[2]) ) + __pyx_t_12 * __pyx_v_B.strides[3]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_7 * __pyx_v_l.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_8 * __pyx_v_s.strides[0]) ))));
+4141:             B[0, m, 1, m] =  - alpha[m]*l[m]*s[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_11 = 0;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_9 = 1;
    __pyx_t_13 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_11 * __pyx_v_B.strides[0]) ) + __pyx_t_10 * __pyx_v_B.strides[1]) ) + __pyx_t_9 * __pyx_v_B.strides[2]) ) + __pyx_t_13 * __pyx_v_B.strides[3]) )) = (((-(*((double *) ( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_8 * __pyx_v_alpha.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_7 * __pyx_v_l.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_12 * __pyx_v_s.strides[0]) ))));
+4142:             B[1, m, 1, m] = alpha[m]*l[m]*s[m] + gIa[m]*Ia[m]
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_10 = 1;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_14 = 1;
    __pyx_t_15 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_10 * __pyx_v_B.strides[0]) ) + __pyx_t_11 * __pyx_v_B.strides[1]) ) + __pyx_t_14 * __pyx_v_B.strides[2]) ) + __pyx_t_15 * __pyx_v_B.strides[3]) )) = ((((*((double *) ( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_12 * __pyx_v_alpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_7 * __pyx_v_l.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_8 * __pyx_v_s.strides[0]) )))) + ((*((double *) ( /* dim=0 */ (__pyx_v_gIa.data + __pyx_t_13 * __pyx_v_gIa.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_Ia.data + __pyx_t_9 * __pyx_v_Ia.strides[0]) )))));
+4143:             B[0, m, 2, m] = - balpha[m]*l[m]*s[m]
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_7 = 0;
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_15 = 2;
    __pyx_t_14 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_7 * __pyx_v_B.strides[0]) ) + __pyx_t_12 * __pyx_v_B.strides[1]) ) + __pyx_t_15 * __pyx_v_B.strides[2]) ) + __pyx_t_14 * __pyx_v_B.strides[3]) )) = (((-(*((double *) ( /* dim=0 */ (__pyx_v_balpha.data + __pyx_t_9 * __pyx_v_balpha.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_13 * __pyx_v_l.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_8 * __pyx_v_s.strides[0]) ))));
+4144:             B[2, m, 2, m] = balpha[m]*l[m]*s[m] + gIs[m]*Is[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_15 = __pyx_v_m;
    __pyx_t_12 = 2;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_11 = 2;
    __pyx_t_10 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_12 * __pyx_v_B.strides[0]) ) + __pyx_t_7 * __pyx_v_B.strides[1]) ) + __pyx_t_11 * __pyx_v_B.strides[2]) ) + __pyx_t_10 * __pyx_v_B.strides[3]) )) = ((((*((double *) ( /* dim=0 */ (__pyx_v_balpha.data + __pyx_t_8 * __pyx_v_balpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_13 * __pyx_v_l.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_9 * __pyx_v_s.strides[0]) )))) + ((*((double *) ( /* dim=0 */ (__pyx_v_gIs.data + __pyx_t_14 * __pyx_v_gIs.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_15 * __pyx_v_Is.strides[0]) )))));
  }
+4145:         self.B_vec = self.B.reshape((self.dim, self.dim))[(self.rows, self.cols)]
  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.B), __pyx_n_s_reshape); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_17 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.dim); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_18 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.dim); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_19 = PyTuple_New(2); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_GIVEREF(__pyx_t_17);
  PyTuple_SET_ITEM(__pyx_t_19, 0, __pyx_t_17);
  __Pyx_GIVEREF(__pyx_t_18);
  PyTuple_SET_ITEM(__pyx_t_19, 1, __pyx_t_18);
  __pyx_t_17 = 0;
  __pyx_t_18 = 0;
  __pyx_t_18 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) {
    __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_16);
    if (likely(__pyx_t_18)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
      __Pyx_INCREF(__pyx_t_18);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_16, function);
    }
  }
  __pyx_t_3 = (__pyx_t_18) ? __Pyx_PyObject_Call2Args(__pyx_t_16, __pyx_t_18, __pyx_t_19) : __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_t_19);
  __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->__pyx_base.rows));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->__pyx_base.rows));
  PyTuple_SET_ITEM(__pyx_t_16, 0, ((PyObject *)__pyx_v_self->__pyx_base.rows));
  __Pyx_INCREF(((PyObject *)__pyx_v_self->__pyx_base.cols));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->__pyx_base.cols));
  PyTuple_SET_ITEM(__pyx_t_16, 1, ((PyObject *)__pyx_v_self->__pyx_base.cols));
  __pyx_t_19 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_16); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (!(likely(((__pyx_t_19) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_19, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4145, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_19);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.B_vec);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.B_vec));
  __pyx_v_self->__pyx_base.B_vec = ((PyArrayObject *)__pyx_t_19);
  __pyx_t_19 = 0;
 4146: 
 4147: @cython.wraparound(False)
 4148: @cython.boundscheck(False)
 4149: @cython.cdivision(True)
 4150: @cython.nonecheck(False)
+4151: cdef class SI2R(SIR_type):
struct __pyx_obj_6pyross_9inference_SI2R {
  struct __pyx_obj_6pyross_9inference_SIR_type __pyx_base;
  PyArrayObject *gIp;
  struct __pyx_obj_6pyross_13deterministic_SI2R *det_model;
};
/* … */
struct __pyx_vtabstruct_6pyross_9inference_SI2R {
  struct __pyx_vtabstruct_6pyross_9inference_SIR_type __pyx_base;
  PyObject *(*fill_lambdas)(struct __pyx_obj_6pyross_9inference_SI2R *, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice);
  PyObject *(*jacobian)(struct __pyx_obj_6pyross_9inference_SI2R *, __Pyx_memviewslice, __Pyx_memviewslice);
  PyObject *(*noise_correlation)(struct __pyx_obj_6pyross_9inference_SI2R *, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice);
};
static struct __pyx_vtabstruct_6pyross_9inference_SI2R *__pyx_vtabptr_6pyross_9inference_SI2R;

 4152:     """
 4153:     Susceptible, Infected, Removed (SI2R)
 4154: 
 4155:     * Ip: presymptomatic
 4156:     * Ia: asymptomatic
 4157:     * Is: symptomatic
 4158: 
 4159:     To initialise the SIR class,
 4160: 
 4161:     Parameters
 4162:     ----------
 4163:     parameters: dict
 4164:         Contains the following keys:
 4165: 
 4166:         alpha: float
 4167:             Ratio of asymptomatic carriers
 4168:         beta: float
 4169:             Infection rate upon contact
 4170:         gIp: float
 4171:             Recovery rate for presymptomatic
 4172:         gIa: float
 4173:             Recovery rate for asymptomatic
 4174:         gIs: float
 4175:             Recovery rate for symptomatic
 4176:         fsa: float
 4177:             Fraction by which symptomatic individuals do not self-isolate.
 4178:     M: int
 4179:         Number of age groups
 4180:     fi: float numpy.array
 4181:         Number of people in each age group divided by Omega.
 4182:     Omega: float, optional
 4183:         System size parameter, e.g. total population. Default to 1.
 4184:     steps: int, optional
 4185:         The number of internal integration steps performed between the observed points (not used in tangent space inference).
 4186:         For robustness, set steps to be large, lyapunov_method='LSODA'.
 4187:         For speed, set steps to be small (~4), lyapunov_method='euler'.
 4188:         For a combination of the two, choose something in between.
 4189:     det_method: str, optional
 4190:         The integration method used for deterministic integration.
 4191:         Choose one of 'LSODA' and 'RK45'. Default is 'LSODA'.
 4192:     lyapunov_method: str, optional
 4193:         The integration method used for the integration of the Lyapunov equation for the covariance.
 4194:         Choose one of 'LSODA', 'RK45', 'RK2', 'RK4' and 'euler'. Default is 'LSODA'.
 4195:     rtol_det: float, optional
 4196:         relative tolerance for the deterministic integrator (default 1e-4)
 4197:     rtol_lyapunov: float, optional
 4198:         relative tolerance for the Lyapunov-type integrator (default 1e-3)
 4199:     max_steps_det: int, optional
 4200:         Maximum number of integration steps (total) for the deterministic integrator. Default: unlimited (represented as 0). 
 4201:         Parameters for which the integrator reaches max_steps_det are disregarded by the optimiser.
 4202:     max_steps_lyapunov: int, optional
 4203:         Maximum number of integration steps (total) for the Lyapunov-type integrator. Default: unlimited (represented as 0)
 4204:         Parameters for which the integrator reaches max_steps_lyapunov are disregarded by the optimiser.
 4205:     
 4206:     """
 4207:         #cdef readonly pyross.deterministic.SI2R det_model
 4208:     cdef:
+4209:         readonly np.ndarray gIp
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_4SI2R_3gIp_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_4SI2R_3gIp_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_4SI2R_3gIp___get__(((struct __pyx_obj_6pyross_9inference_SI2R *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_4SI2R_3gIp___get__(struct __pyx_obj_6pyross_9inference_SI2R *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->gIp));
  __pyx_r = ((PyObject *)__pyx_v_self->gIp);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4210:         readonly pyross.deterministic.SI2R det_model
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_4SI2R_9det_model_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_4SI2R_9det_model_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_4SI2R_9det_model___get__(((struct __pyx_obj_6pyross_9inference_SI2R *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_4SI2R_9det_model___get__(struct __pyx_obj_6pyross_9inference_SI2R *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->det_model));
  __pyx_r = ((PyObject *)__pyx_v_self->det_model);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4211: 
 4212: 
+4213:     def __init__(self, parameters, M, fi, Omega=1, steps=4, det_method='LSODA', lyapunov_method='LSODA', rtol_det=1e-4, rtol_lyapunov=1e-3, max_steps_det=0, max_steps_lyapunov=0):
/* Python wrapper */
static int __pyx_pw_6pyross_9inference_4SI2R_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6pyross_9inference_4SI2R_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_parameters = 0;
  PyObject *__pyx_v_M = 0;
  PyObject *__pyx_v_fi = 0;
  PyObject *__pyx_v_Omega = 0;
  PyObject *__pyx_v_steps = 0;
  PyObject *__pyx_v_det_method = 0;
  PyObject *__pyx_v_lyapunov_method = 0;
  PyObject *__pyx_v_rtol_det = 0;
  PyObject *__pyx_v_rtol_lyapunov = 0;
  PyObject *__pyx_v_max_steps_det = 0;
  PyObject *__pyx_v_max_steps_lyapunov = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_parameters,&__pyx_n_s_M,&__pyx_n_s_fi,&__pyx_n_s_Omega,&__pyx_n_s_steps,&__pyx_n_s_det_method,&__pyx_n_s_lyapunov_method,&__pyx_n_s_rtol_det,&__pyx_n_s_rtol_lyapunov,&__pyx_n_s_max_steps_det,&__pyx_n_s_max_steps_lyapunov,0};
    PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0};
    values[3] = ((PyObject *)__pyx_int_1);
    values[4] = ((PyObject *)__pyx_int_4);
    values[5] = ((PyObject *)__pyx_n_u_LSODA);
    values[6] = ((PyObject *)__pyx_n_u_LSODA);
    values[7] = ((PyObject *)__pyx_float_1eneg_4);
    values[8] = ((PyObject *)__pyx_float_1eneg_3);
    values[9] = ((PyObject *)__pyx_int_0);
    values[10] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_parameters)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, 1); __PYX_ERR(0, 4213, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fi)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, 2); __PYX_ERR(0, 4213, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Omega);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_steps);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_det_method);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lyapunov_method);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol_det);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol_lyapunov);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps_det);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps_lyapunov);
          if (value) { values[10] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 4213, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_parameters = values[0];
    __pyx_v_M = values[1];
    __pyx_v_fi = values[2];
    __pyx_v_Omega = values[3];
    __pyx_v_steps = values[4];
    __pyx_v_det_method = values[5];
    __pyx_v_lyapunov_method = values[6];
    __pyx_v_rtol_det = values[7];
    __pyx_v_rtol_lyapunov = values[8];
    __pyx_v_max_steps_det = values[9];
    __pyx_v_max_steps_lyapunov = values[10];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4213, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SI2R.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_4SI2R___init__(((struct __pyx_obj_6pyross_9inference_SI2R *)__pyx_v_self), __pyx_v_parameters, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6pyross_9inference_4SI2R___init__(struct __pyx_obj_6pyross_9inference_SI2R *__pyx_v_self, PyObject *__pyx_v_parameters, PyObject *__pyx_v_M, PyObject *__pyx_v_fi, PyObject *__pyx_v_Omega, PyObject *__pyx_v_steps, PyObject *__pyx_v_det_method, PyObject *__pyx_v_lyapunov_method, PyObject *__pyx_v_rtol_det, PyObject *__pyx_v_rtol_lyapunov, PyObject *__pyx_v_max_steps_det, PyObject *__pyx_v_max_steps_lyapunov) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pyross.inference.SI2R.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4214:         #self.param_keys = ['alpha', 'beta', 'gIa', 'gIs', 'fsa']
 4215:         #super().__init__(parameters, 3, M, fi, Omega, steps, det_method, lyapunov_method, rtol_det, rtol_lyapunov, max_steps_det, max_steps_lyapunov)
 4216:         #self.class_index_dict = {'S':0, 'Ia':1, 'Is':2}
+4217:         self.param_keys = ['alpha', 'beta', 'gIp', 'gIa', 'gIs', 'fsa']
  __pyx_t_1 = PyList_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4217, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_u_alpha);
  __Pyx_GIVEREF(__pyx_n_u_alpha);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_alpha);
  __Pyx_INCREF(__pyx_n_u_beta);
  __Pyx_GIVEREF(__pyx_n_u_beta);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_u_beta);
  __Pyx_INCREF(__pyx_n_u_gIp);
  __Pyx_GIVEREF(__pyx_n_u_gIp);
  PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_u_gIp);
  __Pyx_INCREF(__pyx_n_u_gIa);
  __Pyx_GIVEREF(__pyx_n_u_gIa);
  PyList_SET_ITEM(__pyx_t_1, 3, __pyx_n_u_gIa);
  __Pyx_INCREF(__pyx_n_u_gIs);
  __Pyx_GIVEREF(__pyx_n_u_gIs);
  PyList_SET_ITEM(__pyx_t_1, 4, __pyx_n_u_gIs);
  __Pyx_INCREF(__pyx_n_u_fsa);
  __Pyx_GIVEREF(__pyx_n_u_fsa);
  PyList_SET_ITEM(__pyx_t_1, 5, __pyx_n_u_fsa);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.param_keys);
  __Pyx_DECREF(__pyx_v_self->__pyx_base.param_keys);
  __pyx_v_self->__pyx_base.param_keys = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4218:         super().__init__(parameters, 4, M, fi, Omega, steps, det_method, lyapunov_method, rtol_det, rtol_lyapunov, max_steps_det, max_steps_lyapunov)
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6pyross_9inference_SI2R));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6pyross_9inference_SI2R));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_ptype_6pyross_9inference_SI2R));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self));
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[13] = {__pyx_t_3, __pyx_v_parameters, __pyx_int_4, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 12+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4218, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[13] = {__pyx_t_3, __pyx_v_parameters, __pyx_int_4, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 12+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4218, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(12+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_parameters);
    __Pyx_GIVEREF(__pyx_v_parameters);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_parameters);
    __Pyx_INCREF(__pyx_int_4);
    __Pyx_GIVEREF(__pyx_int_4);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_int_4);
    __Pyx_INCREF(__pyx_v_M);
    __Pyx_GIVEREF(__pyx_v_M);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_M);
    __Pyx_INCREF(__pyx_v_fi);
    __Pyx_GIVEREF(__pyx_v_fi);
    PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_v_fi);
    __Pyx_INCREF(__pyx_v_Omega);
    __Pyx_GIVEREF(__pyx_v_Omega);
    PyTuple_SET_ITEM(__pyx_t_5, 4+__pyx_t_4, __pyx_v_Omega);
    __Pyx_INCREF(__pyx_v_steps);
    __Pyx_GIVEREF(__pyx_v_steps);
    PyTuple_SET_ITEM(__pyx_t_5, 5+__pyx_t_4, __pyx_v_steps);
    __Pyx_INCREF(__pyx_v_det_method);
    __Pyx_GIVEREF(__pyx_v_det_method);
    PyTuple_SET_ITEM(__pyx_t_5, 6+__pyx_t_4, __pyx_v_det_method);
    __Pyx_INCREF(__pyx_v_lyapunov_method);
    __Pyx_GIVEREF(__pyx_v_lyapunov_method);
    PyTuple_SET_ITEM(__pyx_t_5, 7+__pyx_t_4, __pyx_v_lyapunov_method);
    __Pyx_INCREF(__pyx_v_rtol_det);
    __Pyx_GIVEREF(__pyx_v_rtol_det);
    PyTuple_SET_ITEM(__pyx_t_5, 8+__pyx_t_4, __pyx_v_rtol_det);
    __Pyx_INCREF(__pyx_v_rtol_lyapunov);
    __Pyx_GIVEREF(__pyx_v_rtol_lyapunov);
    PyTuple_SET_ITEM(__pyx_t_5, 9+__pyx_t_4, __pyx_v_rtol_lyapunov);
    __Pyx_INCREF(__pyx_v_max_steps_det);
    __Pyx_GIVEREF(__pyx_v_max_steps_det);
    PyTuple_SET_ITEM(__pyx_t_5, 10+__pyx_t_4, __pyx_v_max_steps_det);
    __Pyx_INCREF(__pyx_v_max_steps_lyapunov);
    __Pyx_GIVEREF(__pyx_v_max_steps_lyapunov);
    PyTuple_SET_ITEM(__pyx_t_5, 11+__pyx_t_4, __pyx_v_max_steps_lyapunov);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4219:         self.class_index_dict = {'S':0, 'Ip':1, 'Ia':2, 'Is':3}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_S, __pyx_int_0) < 0) __PYX_ERR(0, 4219, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_Ip, __pyx_int_1) < 0) __PYX_ERR(0, 4219, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_Ia, __pyx_int_2) < 0) __PYX_ERR(0, 4219, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_Is, __pyx_int_3) < 0) __PYX_ERR(0, 4219, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.class_index_dict);
  __Pyx_DECREF(__pyx_v_self->__pyx_base.class_index_dict);
  __pyx_v_self->__pyx_base.class_index_dict = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4220:         self.set_det_model(parameters)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_det_model); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4220, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_parameters);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4220, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4221: 
+4222:     def set_det_model(self, parameters):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_4SI2R_3set_det_model(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_4SI2R_3set_det_model(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_det_model (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_4SI2R_2set_det_model(((struct __pyx_obj_6pyross_9inference_SI2R *)__pyx_v_self), ((PyObject *)__pyx_v_parameters));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_4SI2R_2set_det_model(struct __pyx_obj_6pyross_9inference_SI2R *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_det_model", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyross.inference.SI2R.set_det_model", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4223:         #self.det_model = pyross.deterministic.SIR(parameters, self.M, self.fi*self.Omega)
+4224:         self.det_model = pyross.deterministic.SI2R(parameters, self.M, self.fi*self.Omega)
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.Omega); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyNumber_Multiply(((PyObject *)__pyx_v_self->__pyx_base.fi), __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_parameters);
  __Pyx_GIVEREF(__pyx_v_parameters);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_parameters);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6pyross_13deterministic_SI2R), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->det_model);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->det_model));
  __pyx_v_self->det_model = ((struct __pyx_obj_6pyross_13deterministic_SI2R *)__pyx_t_3);
  __pyx_t_3 = 0;
 4225: 
+4226:     def infection_indices(self):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_4SI2R_5infection_indices(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_4SI2R_5infection_indices(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infection_indices (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_4SI2R_4infection_indices(((struct __pyx_obj_6pyross_9inference_SI2R *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_4SI2R_4infection_indices(CYTHON_UNUSED struct __pyx_obj_6pyross_9inference_SI2R *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infection_indices", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SI2R.infection_indices", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4227:         #return [1, 2]
+4228:         return [1, 2, 3]
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyList_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4228, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_int_1);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_int_2);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyList_SET_ITEM(__pyx_t_1, 2, __pyx_int_3);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4229: 
 4230:     # Added from SEIR
+4231:     def set_params(self, parameters):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_4SI2R_7set_params(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_4SI2R_7set_params(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_params (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_4SI2R_6set_params(((struct __pyx_obj_6pyross_9inference_SI2R *)__pyx_v_self), ((PyObject *)__pyx_v_parameters));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_4SI2R_6set_params(struct __pyx_obj_6pyross_9inference_SI2R *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_params", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyross.inference.SI2R.set_params", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4232:         super().set_params(parameters)
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6pyross_9inference_SI2R));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6pyross_9inference_SI2R));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_ptype_6pyross_9inference_SI2R));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self));
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_set_params); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_parameters);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4233:         self.gIp = pyross.utils.age_dep_rates(parameters['gIp'], self.M, 'gIp')
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_age_dep_rates); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_v_parameters, __pyx_n_u_gIp); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_3, __pyx_t_4, __pyx_n_u_gIp};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4233, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_3, __pyx_t_4, __pyx_n_u_gIp};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4233, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4233, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_4);
    __Pyx_INCREF(__pyx_n_u_gIp);
    __Pyx_GIVEREF(__pyx_n_u_gIp);
    PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_n_u_gIp);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4233, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4233, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->gIp);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->gIp));
  __pyx_v_self->gIp = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
 4234: 
+4235:     def make_params_dict(self):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_4SI2R_9make_params_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_4SI2R_9make_params_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_params_dict (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_4SI2R_8make_params_dict(((struct __pyx_obj_6pyross_9inference_SI2R *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_4SI2R_8make_params_dict(struct __pyx_obj_6pyross_9inference_SI2R *__pyx_v_self) {
  PyObject *__pyx_v_parameters = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_params_dict", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SI2R.make_params_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_parameters);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4236:         #parameters = {'alpha':self.alpha, 'beta':self.beta, 'gIa':self.gIa, 'gIs':self.gIs, 'fsa':self.fsa}
+4237:         parameters = {'alpha':self.alpha, 'beta':self.beta, 'gIp':self.gIp,
  __pyx_t_1 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_alpha, ((PyObject *)__pyx_v_self->__pyx_base.alpha)) < 0) __PYX_ERR(0, 4237, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_beta, ((PyObject *)__pyx_v_self->__pyx_base.beta)) < 0) __PYX_ERR(0, 4237, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_gIp, ((PyObject *)__pyx_v_self->gIp)) < 0) __PYX_ERR(0, 4237, __pyx_L1_error)
+4238:                       'gIa':self.gIa, 'gIs':self.gIs, 'fsa':self.fsa}
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_gIa, ((PyObject *)__pyx_v_self->__pyx_base.gIa)) < 0) __PYX_ERR(0, 4237, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_gIs, ((PyObject *)__pyx_v_self->__pyx_base.gIs)) < 0) __PYX_ERR(0, 4237, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_fsa, ((PyObject *)__pyx_v_self->__pyx_base.fsa)) < 0) __PYX_ERR(0, 4237, __pyx_L1_error)
  __pyx_v_parameters = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4239:         return parameters
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_parameters);
  __pyx_r = __pyx_v_parameters;
  goto __pyx_L0;
 4240: 
+4241:     cdef compute_jacobian_and_b_matrix(self, double [:] x, double t,
static PyObject *__pyx_f_6pyross_9inference_4SI2R_compute_jacobian_and_b_matrix(struct __pyx_obj_6pyross_9inference_SI2R *__pyx_v_self, __Pyx_memviewslice __pyx_v_x, double __pyx_v_t, struct __pyx_opt_args_6pyross_9inference_4SI2R_compute_jacobian_and_b_matrix *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyross.inference.SI2R.compute_jacobian_and_b_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_s, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Ip, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Ia, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Is, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_l, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_6pyross_9inference_4SI2R_compute_jacobian_and_b_matrix {
  int __pyx_n;
  PyObject *b_matrix;
  PyObject *jacobian;
};
+4242:                                                 b_matrix=True, jacobian=False):
  PyObject *__pyx_v_b_matrix = ((PyObject *)Py_True);
  PyObject *__pyx_v_jacobian = ((PyObject *)Py_False);
  __Pyx_memviewslice __pyx_v_s = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Ip = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Ia = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Is = { 0, 0, { 0 }, { 0 }, { 0 } };
  Py_ssize_t __pyx_v_M;
  __Pyx_memviewslice __pyx_v_l = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("compute_jacobian_and_b_matrix", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_b_matrix = __pyx_optional_args->b_matrix;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_jacobian = __pyx_optional_args->jacobian;
      }
    }
  }
 4243:         cdef:
 4244:             #double [:] s, Ia, Is
 4245:             double [:] s, Ip, Ia, Is
+4246:             Py_ssize_t M=self.M
  __pyx_t_1 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_1;
+4247:         s = x[0:M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    0,
    __pyx_v_M,
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4247, __pyx_L1_error)
}

__pyx_v_s = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
 4248:         #Ia = x[M:2*M]
 4249:         #Is = x[2*M:3*M]
+4250:         Ip = x[M:2*M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    __pyx_v_M,
    (2 * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4250, __pyx_L1_error)
}

__pyx_v_Ip = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4251:         Ia = x[2*M:3*M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    (2 * __pyx_v_M),
    (3 * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4251, __pyx_L1_error)
}

__pyx_v_Ia = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4252:         Is = x[3*M:4*M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    (3 * __pyx_v_M),
    (4 * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4252, __pyx_L1_error)
}

__pyx_v_Is = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4253:         self.CM = self.contactMatrix(t)
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_t); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_self->__pyx_base.contactMatrix);
  __pyx_t_6 = __pyx_v_self->__pyx_base.contactMatrix; __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4253, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.CM);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.CM));
  __pyx_v_self->__pyx_base.CM = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
+4254:         cdef double [:] l=np.zeros((M), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 4254, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4254, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_l = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
 4255:         #self.fill_lambdas(Ia, Is, l)
+4256:         self.fill_lambdas(Ip, Ia, Is, l)
  __pyx_t_7 = ((struct __pyx_vtabstruct_6pyross_9inference_SI2R *)__pyx_v_self->__pyx_base.__pyx_vtab)->fill_lambdas(__pyx_v_self, __pyx_v_Ip, __pyx_v_Ia, __pyx_v_Is, __pyx_v_l); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4257:         if b_matrix:
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_b_matrix); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4257, __pyx_L1_error)
  if (__pyx_t_8) {
/* … */
  }
 4258:             #self.noise_correlation(s, Ia, Is, l)
+4259:             self.noise_correlation(s, Ip, Ia, Is, l)
    __pyx_t_7 = ((struct __pyx_vtabstruct_6pyross_9inference_SI2R *)__pyx_v_self->__pyx_base.__pyx_vtab)->noise_correlation(__pyx_v_self, __pyx_v_s, __pyx_v_Ip, __pyx_v_Ia, __pyx_v_Is, __pyx_v_l); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4259, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4260:         if jacobian:
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_jacobian); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4260, __pyx_L1_error)
  if (__pyx_t_8) {
/* … */
  }
+4261:             self.jacobian(s, l)
    __pyx_t_7 = ((struct __pyx_vtabstruct_6pyross_9inference_SI2R *)__pyx_v_self->__pyx_base.__pyx_vtab)->jacobian(__pyx_v_self, __pyx_v_s, __pyx_v_l); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4261, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 4262: 
 4263:     #cdef fill_lambdas(self, double [:] Ia, double [:] Is, double [:] l):
+4264:     cdef fill_lambdas(self, double [:] Ip, double [:] Ia, double [:] Is, double [:] l):
static PyObject *__pyx_f_6pyross_9inference_4SI2R_fill_lambdas(struct __pyx_obj_6pyross_9inference_SI2R *__pyx_v_self, __Pyx_memviewslice __pyx_v_Ip, __Pyx_memviewslice __pyx_v_Ia, __Pyx_memviewslice __pyx_v_Is, __Pyx_memviewslice __pyx_v_l) {
  __Pyx_memviewslice __pyx_v_CM = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fsa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_beta = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fi = { 0, 0, { 0 }, { 0 }, { 0 } };
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_n;
  Py_ssize_t __pyx_v_M;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fill_lambdas", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_AddTraceback("pyross.inference.SI2R.fill_lambdas", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_CM, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fsa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_beta, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fi, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4265:         cdef:
+4266:             double [:, :] CM=self.CM
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(((PyObject *)__pyx_v_self->__pyx_base.CM), PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 4266, __pyx_L1_error)
  __pyx_v_CM = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+4267:             double [:] fsa=self.fsa, beta=self.beta
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fsa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4267, __pyx_L1_error)
  __pyx_v_fsa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.beta), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4267, __pyx_L1_error)
  __pyx_v_beta = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4268:             double [:] fi=self.fi
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fi), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4268, __pyx_L1_error)
  __pyx_v_fi = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4269:             Py_ssize_t m, n, M=self.M
  __pyx_t_3 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_3;
+4270:         for m in range(M):
  __pyx_t_3 = __pyx_v_M;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_m = __pyx_t_5;
+4271:             for n in range(M):
    __pyx_t_6 = __pyx_v_M;
    __pyx_t_7 = __pyx_t_6;
    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
      __pyx_v_n = __pyx_t_8;
 4272:                 #l[m] += beta[m]*CM[m,n]*(Ia[n]+fsa[n]*Is[n])/fi[n]
+4273:                 l[m] += beta[m]*CM[m,n]*(Ip[n]+Ia[n]+fsa[n]*Is[n])/fi[n]
      __pyx_t_9 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_n;
      __pyx_t_12 = __pyx_v_n;
      __pyx_t_13 = __pyx_v_n;
      __pyx_t_14 = __pyx_v_n;
      __pyx_t_15 = __pyx_v_n;
      __pyx_t_16 = __pyx_v_n;
      __pyx_t_17 = __pyx_v_m;
      *((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_17 * __pyx_v_l.strides[0]) )) += ((((*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_9 * __pyx_v_beta.strides[0]) ))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_10 * __pyx_v_CM.strides[0]) ) + __pyx_t_11 * __pyx_v_CM.strides[1]) )))) * (((*((double *) ( /* dim=0 */ (__pyx_v_Ip.data + __pyx_t_12 * __pyx_v_Ip.strides[0]) ))) + (*((double *) ( /* dim=0 */ (__pyx_v_Ia.data + __pyx_t_13 * __pyx_v_Ia.strides[0]) )))) + ((*((double *) ( /* dim=0 */ (__pyx_v_fsa.data + __pyx_t_14 * __pyx_v_fsa.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_15 * __pyx_v_Is.strides[0]) )))))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_16 * __pyx_v_fi.strides[0]) ))));
    }
  }
 4274: 
+4275:     cdef jacobian(self, double [:] s, double [:] l):
static PyObject *__pyx_f_6pyross_9inference_4SI2R_jacobian(struct __pyx_obj_6pyross_9inference_SI2R *__pyx_v_self, __Pyx_memviewslice __pyx_v_s, __Pyx_memviewslice __pyx_v_l) {
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_n;
  Py_ssize_t __pyx_v_M;
  Py_ssize_t __pyx_v_dim;
  __Pyx_memviewslice __pyx_v_gIp = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gIa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gIs = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fsa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_beta = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_alpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_balpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fi = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_J = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_CM = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("jacobian", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_AddTraceback("pyross.inference.SI2R.jacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIp, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIs, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fsa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_beta, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_alpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_balpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fi, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_J, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_CM, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4276:         cdef:
+4277:             Py_ssize_t m, n, M=self.M, dim=self.dim
  __pyx_t_1 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_1;
  __pyx_t_1 = __pyx_v_self->__pyx_base.dim;
  __pyx_v_dim = __pyx_t_1;
 4278:             #double [:] gIa=self.gIa, gIs=self.gIs, fsa=self.fsa, beta=self.beta
+4279:             double [:] gIp=self.gIp, gIa=self.gIa, gIs=self.gIs, fsa=self.fsa, beta=self.beta
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->gIp), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4279, __pyx_L1_error)
  __pyx_v_gIp = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4279, __pyx_L1_error)
  __pyx_v_gIa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIs), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4279, __pyx_L1_error)
  __pyx_v_gIs = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fsa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4279, __pyx_L1_error)
  __pyx_v_fsa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.beta), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4279, __pyx_L1_error)
  __pyx_v_beta = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4280:             double [:] alpha=self.alpha, balpha=1-self.alpha, fi=self.fi
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.alpha), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4280, __pyx_L1_error)
  __pyx_v_alpha = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_3 = PyNumber_Subtract(__pyx_int_1, ((PyObject *)__pyx_v_self->__pyx_base.alpha)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4280, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4280, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_balpha = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fi), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4280, __pyx_L1_error)
  __pyx_v_fi = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4281:             double [:, :, :, :] J = self.J
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(((PyObject *)__pyx_v_self->__pyx_base.J), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 4281, __pyx_L1_error)
  __pyx_v_J = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
+4282:             double [:, :] CM=self.CM
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(((PyObject *)__pyx_v_self->__pyx_base.CM), PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 4282, __pyx_L1_error)
  __pyx_v_CM = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
 4283:         #for m in range(M):
 4284:         #    J[0, m, 0, m] = -l[m]
 4285:         #    J[1, m, 0, m] = alpha[m]*l[m]
 4286:         #    J[2, m, 0, m] = balpha[m]*l[m]
 4287:         #    for n in range(M):
 4288:         #        J[0, m, 1, n] = -s[m]*beta[m]*CM[m, n]/fi[n]
 4289:         #        J[0, m, 2, n] = -s[m]*beta[m]*CM[m, n]*fsa[n]/fi[n]
 4290:         #        J[1, m, 1, n] = alpha[m]*s[m]*beta[m]*CM[m, n]/fi[n]
 4291:         #        J[1, m, 2, n] = alpha[m]*s[m]*beta[m]*CM[m, n]*fsa[n]/fi[n]
 4292:         #        J[2, m, 1, n] = balpha[m]*s[m]*beta[m]*CM[m, n]/fi[n]
 4293:         #        J[2, m, 2, n] = balpha[m]*s[m]*beta[m]*CM[m, n]*fsa[n]/fi[n]
 4294:         #    J[1, m, 1, m] -= gIa[m]
 4295:         #    J[2, m, 2, m] -= gIs[m]
+4296:         for m in range(M):
  __pyx_t_1 = __pyx_v_M;
  __pyx_t_6 = __pyx_t_1;
  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
    __pyx_v_m = __pyx_t_7;
+4297:             J[0, m, 0, m] = -l[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = 0;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_11 = 0;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_9 * __pyx_v_J.strides[0]) ) + __pyx_t_10 * __pyx_v_J.strides[1]) ) + __pyx_t_11 * __pyx_v_J.strides[2]) ) + __pyx_t_12 * __pyx_v_J.strides[3]) )) = (-(*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_8 * __pyx_v_l.strides[0]) ))));
+4298:             J[1, m, 0, m] = l[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_12 = 1;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_10 = 0;
    __pyx_t_9 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_12 * __pyx_v_J.strides[0]) ) + __pyx_t_11 * __pyx_v_J.strides[1]) ) + __pyx_t_10 * __pyx_v_J.strides[2]) ) + __pyx_t_9 * __pyx_v_J.strides[3]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_8 * __pyx_v_l.strides[0]) )));
+4299:             for n in range(M):
    __pyx_t_13 = __pyx_v_M;
    __pyx_t_14 = __pyx_t_13;
    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
      __pyx_v_n = __pyx_t_15;
+4300:                 J[0, m, 1, n] = -s[m]*beta[m]*CM[m, n]/fi[n]
      __pyx_t_8 = __pyx_v_m;
      __pyx_t_9 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_n;
      __pyx_t_12 = __pyx_v_n;
      __pyx_t_16 = 0;
      __pyx_t_17 = __pyx_v_m;
      __pyx_t_18 = 1;
      __pyx_t_19 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_16 * __pyx_v_J.strides[0]) ) + __pyx_t_17 * __pyx_v_J.strides[1]) ) + __pyx_t_18 * __pyx_v_J.strides[2]) ) + __pyx_t_19 * __pyx_v_J.strides[3]) )) = ((((-(*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_8 * __pyx_v_s.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_9 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_10 * __pyx_v_CM.strides[0]) ) + __pyx_t_11 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_12 * __pyx_v_fi.strides[0]) ))));
+4301:                 J[0, m, 2, n] = -s[m]*beta[m]*CM[m, n]/fi[n]
      __pyx_t_12 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_9 = __pyx_v_n;
      __pyx_t_8 = __pyx_v_n;
      __pyx_t_19 = 0;
      __pyx_t_18 = __pyx_v_m;
      __pyx_t_17 = 2;
      __pyx_t_16 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_19 * __pyx_v_J.strides[0]) ) + __pyx_t_18 * __pyx_v_J.strides[1]) ) + __pyx_t_17 * __pyx_v_J.strides[2]) ) + __pyx_t_16 * __pyx_v_J.strides[3]) )) = ((((-(*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_12 * __pyx_v_s.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_11 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_10 * __pyx_v_CM.strides[0]) ) + __pyx_t_9 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_8 * __pyx_v_fi.strides[0]) ))));
+4302:                 J[0, m, 3, n] = -s[m]*beta[m]*CM[m, n]*fsa[n]/fi[n]
      __pyx_t_8 = __pyx_v_m;
      __pyx_t_9 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_n;
      __pyx_t_12 = __pyx_v_n;
      __pyx_t_16 = __pyx_v_n;
      __pyx_t_17 = 0;
      __pyx_t_18 = __pyx_v_m;
      __pyx_t_19 = 3;
      __pyx_t_20 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_17 * __pyx_v_J.strides[0]) ) + __pyx_t_18 * __pyx_v_J.strides[1]) ) + __pyx_t_19 * __pyx_v_J.strides[2]) ) + __pyx_t_20 * __pyx_v_J.strides[3]) )) = (((((-(*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_8 * __pyx_v_s.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_9 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_10 * __pyx_v_CM.strides[0]) ) + __pyx_t_11 * __pyx_v_CM.strides[1]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_fsa.data + __pyx_t_12 * __pyx_v_fsa.strides[0]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_16 * __pyx_v_fi.strides[0]) ))));
+4303:                 J[1, m, 1, n] =  s[m]*beta[m]*CM[m, n]/fi[n]
      __pyx_t_16 = __pyx_v_m;
      __pyx_t_12 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_n;
      __pyx_t_9 = __pyx_v_n;
      __pyx_t_8 = 1;
      __pyx_t_20 = __pyx_v_m;
      __pyx_t_19 = 1;
      __pyx_t_18 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_8 * __pyx_v_J.strides[0]) ) + __pyx_t_20 * __pyx_v_J.strides[1]) ) + __pyx_t_19 * __pyx_v_J.strides[2]) ) + __pyx_t_18 * __pyx_v_J.strides[3]) )) = ((((*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_16 * __pyx_v_s.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_12 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_11 * __pyx_v_CM.strides[0]) ) + __pyx_t_10 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_9 * __pyx_v_fi.strides[0]) ))));
+4304:                 J[1, m, 2, n] =  s[m]*beta[m]*CM[m, n]/fi[n]
      __pyx_t_9 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_m;
      __pyx_t_12 = __pyx_v_n;
      __pyx_t_16 = __pyx_v_n;
      __pyx_t_18 = 1;
      __pyx_t_19 = __pyx_v_m;
      __pyx_t_20 = 2;
      __pyx_t_8 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_18 * __pyx_v_J.strides[0]) ) + __pyx_t_19 * __pyx_v_J.strides[1]) ) + __pyx_t_20 * __pyx_v_J.strides[2]) ) + __pyx_t_8 * __pyx_v_J.strides[3]) )) = ((((*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_9 * __pyx_v_s.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_10 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_11 * __pyx_v_CM.strides[0]) ) + __pyx_t_12 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_16 * __pyx_v_fi.strides[0]) ))));
+4305:                 J[1, m, 3, n] =  s[m]*beta[m]*CM[m, n]*fsa[n]/fi[n]
      __pyx_t_16 = __pyx_v_m;
      __pyx_t_12 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_n;
      __pyx_t_9 = __pyx_v_n;
      __pyx_t_8 = __pyx_v_n;
      __pyx_t_20 = 1;
      __pyx_t_19 = __pyx_v_m;
      __pyx_t_18 = 3;
      __pyx_t_17 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_20 * __pyx_v_J.strides[0]) ) + __pyx_t_19 * __pyx_v_J.strides[1]) ) + __pyx_t_18 * __pyx_v_J.strides[2]) ) + __pyx_t_17 * __pyx_v_J.strides[3]) )) = (((((*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_16 * __pyx_v_s.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_12 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_11 * __pyx_v_CM.strides[0]) ) + __pyx_t_10 * __pyx_v_CM.strides[1]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_fsa.data + __pyx_t_9 * __pyx_v_fsa.strides[0]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_8 * __pyx_v_fi.strides[0]) ))));
    }
+4306:             J[1, m, 1, m] -= gIp[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = 1;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_11 = 1;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_9 * __pyx_v_J.strides[0]) ) + __pyx_t_10 * __pyx_v_J.strides[1]) ) + __pyx_t_11 * __pyx_v_J.strides[2]) ) + __pyx_t_12 * __pyx_v_J.strides[3]) )) -= (*((double *) ( /* dim=0 */ (__pyx_v_gIp.data + __pyx_t_8 * __pyx_v_gIp.strides[0]) )));
+4307:             J[2, m, 0, m] = 0
    __pyx_t_8 = 2;
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_11 = 0;
    __pyx_t_10 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_8 * __pyx_v_J.strides[0]) ) + __pyx_t_12 * __pyx_v_J.strides[1]) ) + __pyx_t_11 * __pyx_v_J.strides[2]) ) + __pyx_t_10 * __pyx_v_J.strides[3]) )) = 0.0;
+4308:             J[2, m, 1, m] = alpha[m]*gIp[m]
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_12 = 2;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = 1;
    __pyx_t_16 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_12 * __pyx_v_J.strides[0]) ) + __pyx_t_8 * __pyx_v_J.strides[1]) ) + __pyx_t_9 * __pyx_v_J.strides[2]) ) + __pyx_t_16 * __pyx_v_J.strides[3]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_10 * __pyx_v_alpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_gIp.data + __pyx_t_11 * __pyx_v_gIp.strides[0]) ))));
+4309:             J[2, m, 2, m] = -gIa[m]
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_10 = 2;
    __pyx_t_16 = __pyx_v_m;
    __pyx_t_9 = 2;
    __pyx_t_8 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_10 * __pyx_v_J.strides[0]) ) + __pyx_t_16 * __pyx_v_J.strides[1]) ) + __pyx_t_9 * __pyx_v_J.strides[2]) ) + __pyx_t_8 * __pyx_v_J.strides[3]) )) = (-(*((double *) ( /* dim=0 */ (__pyx_v_gIa.data + __pyx_t_11 * __pyx_v_gIa.strides[0]) ))));
+4310:             J[2, m, 3, m] = 0
    __pyx_t_11 = 2;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = 3;
    __pyx_t_16 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_11 * __pyx_v_J.strides[0]) ) + __pyx_t_8 * __pyx_v_J.strides[1]) ) + __pyx_t_9 * __pyx_v_J.strides[2]) ) + __pyx_t_16 * __pyx_v_J.strides[3]) )) = 0.0;
+4311:             J[3, m, 0, m] = 0
    __pyx_t_16 = 3;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_8 = 0;
    __pyx_t_11 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_16 * __pyx_v_J.strides[0]) ) + __pyx_t_9 * __pyx_v_J.strides[1]) ) + __pyx_t_8 * __pyx_v_J.strides[2]) ) + __pyx_t_11 * __pyx_v_J.strides[3]) )) = 0.0;
+4312:             J[3, m, 1, m] = balpha[m]*gIp[m]
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = 3;
    __pyx_t_16 = __pyx_v_m;
    __pyx_t_10 = 1;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_9 * __pyx_v_J.strides[0]) ) + __pyx_t_16 * __pyx_v_J.strides[1]) ) + __pyx_t_10 * __pyx_v_J.strides[2]) ) + __pyx_t_12 * __pyx_v_J.strides[3]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_balpha.data + __pyx_t_11 * __pyx_v_balpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_gIp.data + __pyx_t_8 * __pyx_v_gIp.strides[0]) ))));
+4313:             J[3, m, 2, m] = 0
    __pyx_t_8 = 3;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_12 = 2;
    __pyx_t_10 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_8 * __pyx_v_J.strides[0]) ) + __pyx_t_11 * __pyx_v_J.strides[1]) ) + __pyx_t_12 * __pyx_v_J.strides[2]) ) + __pyx_t_10 * __pyx_v_J.strides[3]) )) = 0.0;
+4314:             J[3, m, 3, m] = -gIs[m]
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_12 = 3;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_8 = 3;
    __pyx_t_16 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_12 * __pyx_v_J.strides[0]) ) + __pyx_t_11 * __pyx_v_J.strides[1]) ) + __pyx_t_8 * __pyx_v_J.strides[2]) ) + __pyx_t_16 * __pyx_v_J.strides[3]) )) = (-(*((double *) ( /* dim=0 */ (__pyx_v_gIs.data + __pyx_t_10 * __pyx_v_gIs.strides[0]) ))));
  }
+4315:         self.J_mat = self.J.reshape((dim, dim))
  __pyx_t_21 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.J), __pyx_n_s_reshape); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4315, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __pyx_t_22 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4315, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __pyx_t_23 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 4315, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_23);
  __pyx_t_24 = PyTuple_New(2); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 4315, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_24);
  __Pyx_GIVEREF(__pyx_t_22);
  PyTuple_SET_ITEM(__pyx_t_24, 0, __pyx_t_22);
  __Pyx_GIVEREF(__pyx_t_23);
  PyTuple_SET_ITEM(__pyx_t_24, 1, __pyx_t_23);
  __pyx_t_22 = 0;
  __pyx_t_23 = 0;
  __pyx_t_23 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_21))) {
    __pyx_t_23 = PyMethod_GET_SELF(__pyx_t_21);
    if (likely(__pyx_t_23)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_21);
      __Pyx_INCREF(__pyx_t_23);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_21, function);
    }
  }
  __pyx_t_3 = (__pyx_t_23) ? __Pyx_PyObject_Call2Args(__pyx_t_21, __pyx_t_23, __pyx_t_24) : __Pyx_PyObject_CallOneArg(__pyx_t_21, __pyx_t_24);
  __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
  __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4315, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4315, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.J_mat);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.J_mat));
  __pyx_v_self->__pyx_base.J_mat = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
 4316: 
 4317:     #cdef noise_correlation(self, double [:] s, double [:] Ia, double [:] Is, double [:] l):
+4318:     cdef noise_correlation(self, double [:] s, double [:] Ip, double [:] Ia, double [:] Is, double [:] l):
static PyObject *__pyx_f_6pyross_9inference_4SI2R_noise_correlation(struct __pyx_obj_6pyross_9inference_SI2R *__pyx_v_self, __Pyx_memviewslice __pyx_v_s, __Pyx_memviewslice __pyx_v_Ip, __Pyx_memviewslice __pyx_v_Ia, __Pyx_memviewslice __pyx_v_Is, __Pyx_memviewslice __pyx_v_l) {
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_M;
  __Pyx_memviewslice __pyx_v_gIp = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gIa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gIs = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_alpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_balpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_B = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("noise_correlation", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_AddTraceback("pyross.inference.SI2R.noise_correlation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIp, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIs, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_alpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_balpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_B, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4319:         cdef:
+4320:             Py_ssize_t m, M=self.M
  __pyx_t_1 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_1;
 4321:             #double [:] gIa=self.gIa, gIs=self.gI
+4322:             double [:] gIp=self.gIp, gIa=self.gIa, gIs=self.gIs
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->gIp), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4322, __pyx_L1_error)
  __pyx_v_gIp = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4322, __pyx_L1_error)
  __pyx_v_gIa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIs), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4322, __pyx_L1_error)
  __pyx_v_gIs = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4323:             double [:] alpha=self.alpha, balpha=1-self.alpha
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.alpha), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4323, __pyx_L1_error)
  __pyx_v_alpha = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_3 = PyNumber_Subtract(__pyx_int_1, ((PyObject *)__pyx_v_self->__pyx_base.alpha)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4323, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4323, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_balpha = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4324:             double [:, :, :, :] B = self.B
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(((PyObject *)__pyx_v_self->__pyx_base.B), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 4324, __pyx_L1_error)
  __pyx_v_B = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
 4325:         #for m in range(M): # only fill in the upper triangular form
 4326:         #    B[0, m, 0, m] = l[m]*s[m]
 4327:         #    B[0, m, 1, m] =  - alpha[m]*l[m]*s[m]
 4328:         #    B[1, m, 1, m] = alpha[m]*l[m]*s[m] + gIa[m]*Ia[m]
 4329:         #    B[0, m, 2, m] = - balpha[m]*l[m]*s[m]
 4330:         #    B[2, m, 2, m] = balpha[m]*l[m]*s[m] + gIs[m]*Is[m]
+4331:         for m in range(M): # only fill in the upper triangular form
  __pyx_t_1 = __pyx_v_M;
  __pyx_t_5 = __pyx_t_1;
  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
    __pyx_v_m = __pyx_t_6;
+4332:             B[0, m, 0, m] = l[m]*s[m]
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = 0;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_11 = 0;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_9 * __pyx_v_B.strides[0]) ) + __pyx_t_10 * __pyx_v_B.strides[1]) ) + __pyx_t_11 * __pyx_v_B.strides[2]) ) + __pyx_t_12 * __pyx_v_B.strides[3]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_7 * __pyx_v_l.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_8 * __pyx_v_s.strides[0]) ))));
+4333:             B[0, m, 1, m] = -l[m]*s[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_12 = 0;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_10 = 1;
    __pyx_t_9 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_12 * __pyx_v_B.strides[0]) ) + __pyx_t_11 * __pyx_v_B.strides[1]) ) + __pyx_t_10 * __pyx_v_B.strides[2]) ) + __pyx_t_9 * __pyx_v_B.strides[3]) )) = ((-(*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_8 * __pyx_v_l.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_7 * __pyx_v_s.strides[0]) ))));
+4334:             B[0, m, 2, m] = 0
    __pyx_t_7 = 0;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = 2;
    __pyx_t_10 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_7 * __pyx_v_B.strides[0]) ) + __pyx_t_8 * __pyx_v_B.strides[1]) ) + __pyx_t_9 * __pyx_v_B.strides[2]) ) + __pyx_t_10 * __pyx_v_B.strides[3]) )) = 0.0;
+4335:             B[0, m, 3, m] = 0
    __pyx_t_10 = 0;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_8 = 3;
    __pyx_t_7 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_10 * __pyx_v_B.strides[0]) ) + __pyx_t_9 * __pyx_v_B.strides[1]) ) + __pyx_t_8 * __pyx_v_B.strides[2]) ) + __pyx_t_7 * __pyx_v_B.strides[3]) )) = 0.0;
+4336:             B[1, m, 1, m] = l[m]*s[m] + gIp[m]*Ip[m]
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_11 = 1;
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_13 = 1;
    __pyx_t_14 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_11 * __pyx_v_B.strides[0]) ) + __pyx_t_12 * __pyx_v_B.strides[1]) ) + __pyx_t_13 * __pyx_v_B.strides[2]) ) + __pyx_t_14 * __pyx_v_B.strides[3]) )) = (((*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_7 * __pyx_v_l.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_8 * __pyx_v_s.strides[0]) )))) + ((*((double *) ( /* dim=0 */ (__pyx_v_gIp.data + __pyx_t_9 * __pyx_v_gIp.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_Ip.data + __pyx_t_10 * __pyx_v_Ip.strides[0]) )))));
+4337:             B[1, m, 2, m] = - alpha[m]*gIp[m]*Ip[m]
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_7 = 1;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_13 = 2;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_7 * __pyx_v_B.strides[0]) ) + __pyx_t_14 * __pyx_v_B.strides[1]) ) + __pyx_t_13 * __pyx_v_B.strides[2]) ) + __pyx_t_12 * __pyx_v_B.strides[3]) )) = (((-(*((double *) ( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_10 * __pyx_v_alpha.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_gIp.data + __pyx_t_9 * __pyx_v_gIp.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_Ip.data + __pyx_t_8 * __pyx_v_Ip.strides[0]) ))));
+4338:             B[1, m, 3, m] = - balpha[m]*gIp[m]*Ip[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_12 = 1;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_14 = 3;
    __pyx_t_7 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_12 * __pyx_v_B.strides[0]) ) + __pyx_t_13 * __pyx_v_B.strides[1]) ) + __pyx_t_14 * __pyx_v_B.strides[2]) ) + __pyx_t_7 * __pyx_v_B.strides[3]) )) = (((-(*((double *) ( /* dim=0 */ (__pyx_v_balpha.data + __pyx_t_8 * __pyx_v_balpha.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_gIp.data + __pyx_t_9 * __pyx_v_gIp.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_Ip.data + __pyx_t_10 * __pyx_v_Ip.strides[0]) ))));
+4339:             B[2, m, 2, m] = alpha[m]*gIp[m]*Ip[m] + gIa[m]*Ia[m]
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_13 = 2;
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_11 = 2;
    __pyx_t_15 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_13 * __pyx_v_B.strides[0]) ) + __pyx_t_12 * __pyx_v_B.strides[1]) ) + __pyx_t_11 * __pyx_v_B.strides[2]) ) + __pyx_t_15 * __pyx_v_B.strides[3]) )) = ((((*((double *) ( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_10 * __pyx_v_alpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_gIp.data + __pyx_t_9 * __pyx_v_gIp.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_Ip.data + __pyx_t_8 * __pyx_v_Ip.strides[0]) )))) + ((*((double *) ( /* dim=0 */ (__pyx_v_gIa.data + __pyx_t_7 * __pyx_v_gIa.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_Ia.data + __pyx_t_14 * __pyx_v_Ia.strides[0]) )))));
+4340:             B[2, m, 3, m] = 0
    __pyx_t_14 = 2;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_8 = 3;
    __pyx_t_9 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_14 * __pyx_v_B.strides[0]) ) + __pyx_t_7 * __pyx_v_B.strides[1]) ) + __pyx_t_8 * __pyx_v_B.strides[2]) ) + __pyx_t_9 * __pyx_v_B.strides[3]) )) = 0.0;
+4341:             B[3, m, 3, m] = balpha[m]*gIp[m]*Ip[m] + gIs[m]*Is[m]
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_15 = 3;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_12 = 3;
    __pyx_t_13 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_15 * __pyx_v_B.strides[0]) ) + __pyx_t_11 * __pyx_v_B.strides[1]) ) + __pyx_t_12 * __pyx_v_B.strides[2]) ) + __pyx_t_13 * __pyx_v_B.strides[3]) )) = ((((*((double *) ( /* dim=0 */ (__pyx_v_balpha.data + __pyx_t_9 * __pyx_v_balpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_gIp.data + __pyx_t_8 * __pyx_v_gIp.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_Ip.data + __pyx_t_7 * __pyx_v_Ip.strides[0]) )))) + ((*((double *) ( /* dim=0 */ (__pyx_v_gIs.data + __pyx_t_14 * __pyx_v_gIs.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_10 * __pyx_v_Is.strides[0]) )))));
  }
+4342:         self.B_vec = self.B.reshape((self.dim, self.dim))[(self.rows, self.cols)]
  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.B), __pyx_n_s_reshape); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_17 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.dim); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_18 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.dim); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_19 = PyTuple_New(2); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_GIVEREF(__pyx_t_17);
  PyTuple_SET_ITEM(__pyx_t_19, 0, __pyx_t_17);
  __Pyx_GIVEREF(__pyx_t_18);
  PyTuple_SET_ITEM(__pyx_t_19, 1, __pyx_t_18);
  __pyx_t_17 = 0;
  __pyx_t_18 = 0;
  __pyx_t_18 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) {
    __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_16);
    if (likely(__pyx_t_18)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
      __Pyx_INCREF(__pyx_t_18);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_16, function);
    }
  }
  __pyx_t_3 = (__pyx_t_18) ? __Pyx_PyObject_Call2Args(__pyx_t_16, __pyx_t_18, __pyx_t_19) : __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_t_19);
  __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->__pyx_base.rows));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->__pyx_base.rows));
  PyTuple_SET_ITEM(__pyx_t_16, 0, ((PyObject *)__pyx_v_self->__pyx_base.rows));
  __Pyx_INCREF(((PyObject *)__pyx_v_self->__pyx_base.cols));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->__pyx_base.cols));
  PyTuple_SET_ITEM(__pyx_t_16, 1, ((PyObject *)__pyx_v_self->__pyx_base.cols));
  __pyx_t_19 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_16); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (!(likely(((__pyx_t_19) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_19, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4342, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_19);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.B_vec);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.B_vec));
  __pyx_v_self->__pyx_base.B_vec = ((PyArrayObject *)__pyx_t_19);
  __pyx_t_19 = 0;
 4343: 
 4344: 
 4345: @cython.wraparound(False)
 4346: @cython.boundscheck(False)
 4347: @cython.cdivision(True)
 4348: @cython.nonecheck(False)
+4349: cdef class SEIR(SIR_type):
struct __pyx_obj_6pyross_9inference_SEIR {
  struct __pyx_obj_6pyross_9inference_SIR_type __pyx_base;
  PyArrayObject *gE;
  struct __pyx_obj_6pyross_13deterministic_SEIR *det_model;
};
/* … */
struct __pyx_vtabstruct_6pyross_9inference_SEIR {
  struct __pyx_vtabstruct_6pyross_9inference_SIR_type __pyx_base;
  PyObject *(*fill_lambdas)(struct __pyx_obj_6pyross_9inference_SEIR *, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice);
  PyObject *(*jacobian)(struct __pyx_obj_6pyross_9inference_SEIR *, __Pyx_memviewslice, __Pyx_memviewslice);
  PyObject *(*noise_correlation)(struct __pyx_obj_6pyross_9inference_SEIR *, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice);
};
static struct __pyx_vtabstruct_6pyross_9inference_SEIR *__pyx_vtabptr_6pyross_9inference_SEIR;

 4350:     """
 4351:     Susceptible, Exposed, Infected, Removed (SEIR)
 4352: 
 4353:     * Ia: asymptomatic
 4354:     * Is: symptomatic
 4355: 
 4356:     To initialise the SEIR class,
 4357: 
 4358:     Parameters
 4359:     ----------
 4360:     parameters: dict
 4361:         Contains the following keys:
 4362: 
 4363:         alpha: float or np.array(M)
 4364:             Fraction of infected who are asymptomatic.
 4365:         beta: float
 4366:             Rate of spread of infection.
 4367:         gIa: float
 4368:             Rate of removal from asymptomatic individuals.
 4369:         gIs: float
 4370:             Rate of removal from symptomatic individuals.
 4371:         fsa: float
 4372:             Fraction by which symptomatic individuals do not self-isolate.
 4373:         gE: float
 4374:             rate of removal from exposed individuals.
 4375:     M: int
 4376:         Number of age groups
 4377:     fi: float numpy.array
 4378:         Number of people in each compartment divided by Omega
 4379:     Omega: float, optional
 4380:         System size, e.g. total population. Default is 1.
 4381:     steps: int, optional
 4382:         The number of internal integration steps performed between the observed points (not used in tangent space inference).
 4383:         For robustness, set steps to be large, lyapunov_method='LSODA'.
 4384:         For speed, set steps to be small (~4), lyapunov_method='euler'.
 4385:         For a combination of the two, choose something in between.
 4386:     det_method: str, optional
 4387:         The integration method used for deterministic integration.
 4388:         Choose one of 'LSODA' and 'RK45'. Default is 'LSODA'.
 4389:     lyapunov_method: str, optional
 4390:         The integration method used for the integration of the Lyapunov equation for the covariance.
 4391:         Choose one of 'LSODA', 'RK45', 'RK2', 'RK4' and 'euler'. Default is 'LSODA'.
 4392:     rtol_det: float, optional
 4393:         relative tolerance for the deterministic integrator (default 1e-3)
 4394:     rtol_lyapunov: float, optional
 4395:         relative tolerance for the Lyapunov-type integrator (default 1e-3)
 4396:     max_steps_det: int, optional
 4397:         Maximum number of integration steps (total) for the deterministic integrator. Default: unlimited (represented as 0)
 4398:         Parameters for which the integrator reaches max_steps_det are disregarded by the optimiser.
 4399:     max_steps_lyapunov: int, optional
 4400:         Maximum number of integration steps (total) for the Lyapunov-type integrator. Default: unlimited (represented as 0)
 4401:         Parameters for which the integrator reaches max_steps_lyapunov are disregarded by the optimiser.
 4402:     """
 4403: 
 4404:     cdef:
+4405:         readonly np.ndarray gE
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_4SEIR_2gE_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_4SEIR_2gE_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_4SEIR_2gE___get__(((struct __pyx_obj_6pyross_9inference_SEIR *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_4SEIR_2gE___get__(struct __pyx_obj_6pyross_9inference_SEIR *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->gE));
  __pyx_r = ((PyObject *)__pyx_v_self->gE);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4406:         readonly pyross.deterministic.SEIR det_model
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_4SEIR_9det_model_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_4SEIR_9det_model_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_4SEIR_9det_model___get__(((struct __pyx_obj_6pyross_9inference_SEIR *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_4SEIR_9det_model___get__(struct __pyx_obj_6pyross_9inference_SEIR *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->det_model));
  __pyx_r = ((PyObject *)__pyx_v_self->det_model);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4407: 
+4408:     def __init__(self, parameters, M, fi, Omega=1, steps=4, det_method='LSODA', lyapunov_method='LSODA', rtol_det=1e-3, rtol_lyapunov=1e-3, max_steps_det=0, max_steps_lyapunov=0):
/* Python wrapper */
static int __pyx_pw_6pyross_9inference_4SEIR_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6pyross_9inference_4SEIR_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_parameters = 0;
  PyObject *__pyx_v_M = 0;
  PyObject *__pyx_v_fi = 0;
  PyObject *__pyx_v_Omega = 0;
  PyObject *__pyx_v_steps = 0;
  PyObject *__pyx_v_det_method = 0;
  PyObject *__pyx_v_lyapunov_method = 0;
  PyObject *__pyx_v_rtol_det = 0;
  PyObject *__pyx_v_rtol_lyapunov = 0;
  PyObject *__pyx_v_max_steps_det = 0;
  PyObject *__pyx_v_max_steps_lyapunov = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_parameters,&__pyx_n_s_M,&__pyx_n_s_fi,&__pyx_n_s_Omega,&__pyx_n_s_steps,&__pyx_n_s_det_method,&__pyx_n_s_lyapunov_method,&__pyx_n_s_rtol_det,&__pyx_n_s_rtol_lyapunov,&__pyx_n_s_max_steps_det,&__pyx_n_s_max_steps_lyapunov,0};
    PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0};
    values[3] = ((PyObject *)__pyx_int_1);
    values[4] = ((PyObject *)__pyx_int_4);
    values[5] = ((PyObject *)__pyx_n_u_LSODA);
    values[6] = ((PyObject *)__pyx_n_u_LSODA);
    values[7] = ((PyObject *)__pyx_float_1eneg_3);
    values[8] = ((PyObject *)__pyx_float_1eneg_3);
    values[9] = ((PyObject *)__pyx_int_0);
    values[10] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_parameters)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, 1); __PYX_ERR(0, 4408, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fi)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, 2); __PYX_ERR(0, 4408, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Omega);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_steps);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_det_method);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lyapunov_method);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol_det);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol_lyapunov);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps_det);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps_lyapunov);
          if (value) { values[10] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 4408, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_parameters = values[0];
    __pyx_v_M = values[1];
    __pyx_v_fi = values[2];
    __pyx_v_Omega = values[3];
    __pyx_v_steps = values[4];
    __pyx_v_det_method = values[5];
    __pyx_v_lyapunov_method = values[6];
    __pyx_v_rtol_det = values[7];
    __pyx_v_rtol_lyapunov = values[8];
    __pyx_v_max_steps_det = values[9];
    __pyx_v_max_steps_lyapunov = values[10];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4408, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SEIR.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_4SEIR___init__(((struct __pyx_obj_6pyross_9inference_SEIR *)__pyx_v_self), __pyx_v_parameters, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6pyross_9inference_4SEIR___init__(struct __pyx_obj_6pyross_9inference_SEIR *__pyx_v_self, PyObject *__pyx_v_parameters, PyObject *__pyx_v_M, PyObject *__pyx_v_fi, PyObject *__pyx_v_Omega, PyObject *__pyx_v_steps, PyObject *__pyx_v_det_method, PyObject *__pyx_v_lyapunov_method, PyObject *__pyx_v_rtol_det, PyObject *__pyx_v_rtol_lyapunov, PyObject *__pyx_v_max_steps_det, PyObject *__pyx_v_max_steps_lyapunov) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pyross.inference.SEIR.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4409:         self.param_keys = ['alpha', 'beta', 'gE', 'gIa', 'gIs', 'fsa']
  __pyx_t_1 = PyList_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4409, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_u_alpha);
  __Pyx_GIVEREF(__pyx_n_u_alpha);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_alpha);
  __Pyx_INCREF(__pyx_n_u_beta);
  __Pyx_GIVEREF(__pyx_n_u_beta);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_u_beta);
  __Pyx_INCREF(__pyx_n_u_gE);
  __Pyx_GIVEREF(__pyx_n_u_gE);
  PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_u_gE);
  __Pyx_INCREF(__pyx_n_u_gIa);
  __Pyx_GIVEREF(__pyx_n_u_gIa);
  PyList_SET_ITEM(__pyx_t_1, 3, __pyx_n_u_gIa);
  __Pyx_INCREF(__pyx_n_u_gIs);
  __Pyx_GIVEREF(__pyx_n_u_gIs);
  PyList_SET_ITEM(__pyx_t_1, 4, __pyx_n_u_gIs);
  __Pyx_INCREF(__pyx_n_u_fsa);
  __Pyx_GIVEREF(__pyx_n_u_fsa);
  PyList_SET_ITEM(__pyx_t_1, 5, __pyx_n_u_fsa);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.param_keys);
  __Pyx_DECREF(__pyx_v_self->__pyx_base.param_keys);
  __pyx_v_self->__pyx_base.param_keys = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4410:         super().__init__(parameters, 4, M, fi, Omega, steps, det_method, lyapunov_method, rtol_det, rtol_lyapunov, max_steps_det, max_steps_lyapunov)
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4410, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6pyross_9inference_SEIR));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6pyross_9inference_SEIR));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_ptype_6pyross_9inference_SEIR));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self));
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4410, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4410, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[13] = {__pyx_t_3, __pyx_v_parameters, __pyx_int_4, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 12+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4410, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[13] = {__pyx_t_3, __pyx_v_parameters, __pyx_int_4, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 12+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4410, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(12+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_parameters);
    __Pyx_GIVEREF(__pyx_v_parameters);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_parameters);
    __Pyx_INCREF(__pyx_int_4);
    __Pyx_GIVEREF(__pyx_int_4);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_int_4);
    __Pyx_INCREF(__pyx_v_M);
    __Pyx_GIVEREF(__pyx_v_M);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_M);
    __Pyx_INCREF(__pyx_v_fi);
    __Pyx_GIVEREF(__pyx_v_fi);
    PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_v_fi);
    __Pyx_INCREF(__pyx_v_Omega);
    __Pyx_GIVEREF(__pyx_v_Omega);
    PyTuple_SET_ITEM(__pyx_t_5, 4+__pyx_t_4, __pyx_v_Omega);
    __Pyx_INCREF(__pyx_v_steps);
    __Pyx_GIVEREF(__pyx_v_steps);
    PyTuple_SET_ITEM(__pyx_t_5, 5+__pyx_t_4, __pyx_v_steps);
    __Pyx_INCREF(__pyx_v_det_method);
    __Pyx_GIVEREF(__pyx_v_det_method);
    PyTuple_SET_ITEM(__pyx_t_5, 6+__pyx_t_4, __pyx_v_det_method);
    __Pyx_INCREF(__pyx_v_lyapunov_method);
    __Pyx_GIVEREF(__pyx_v_lyapunov_method);
    PyTuple_SET_ITEM(__pyx_t_5, 7+__pyx_t_4, __pyx_v_lyapunov_method);
    __Pyx_INCREF(__pyx_v_rtol_det);
    __Pyx_GIVEREF(__pyx_v_rtol_det);
    PyTuple_SET_ITEM(__pyx_t_5, 8+__pyx_t_4, __pyx_v_rtol_det);
    __Pyx_INCREF(__pyx_v_rtol_lyapunov);
    __Pyx_GIVEREF(__pyx_v_rtol_lyapunov);
    PyTuple_SET_ITEM(__pyx_t_5, 9+__pyx_t_4, __pyx_v_rtol_lyapunov);
    __Pyx_INCREF(__pyx_v_max_steps_det);
    __Pyx_GIVEREF(__pyx_v_max_steps_det);
    PyTuple_SET_ITEM(__pyx_t_5, 10+__pyx_t_4, __pyx_v_max_steps_det);
    __Pyx_INCREF(__pyx_v_max_steps_lyapunov);
    __Pyx_GIVEREF(__pyx_v_max_steps_lyapunov);
    PyTuple_SET_ITEM(__pyx_t_5, 11+__pyx_t_4, __pyx_v_max_steps_lyapunov);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4411:         self.class_index_dict = {'S':0, 'E':1, 'Ia':2, 'Is':3}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4411, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_S, __pyx_int_0) < 0) __PYX_ERR(0, 4411, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_E, __pyx_int_1) < 0) __PYX_ERR(0, 4411, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_Ia, __pyx_int_2) < 0) __PYX_ERR(0, 4411, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_Is, __pyx_int_3) < 0) __PYX_ERR(0, 4411, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.class_index_dict);
  __Pyx_DECREF(__pyx_v_self->__pyx_base.class_index_dict);
  __pyx_v_self->__pyx_base.class_index_dict = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4412:         self.set_det_model(parameters)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_det_model); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4412, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_parameters);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4412, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4413: 
+4414:     def infection_indices(self):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_4SEIR_3infection_indices(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_4SEIR_3infection_indices(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infection_indices (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_4SEIR_2infection_indices(((struct __pyx_obj_6pyross_9inference_SEIR *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_4SEIR_2infection_indices(CYTHON_UNUSED struct __pyx_obj_6pyross_9inference_SEIR *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infection_indices", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SEIR.infection_indices", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4415:         return [1, 2, 3]
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyList_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4415, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_int_1);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_int_2);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyList_SET_ITEM(__pyx_t_1, 2, __pyx_int_3);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4416: 
+4417:     def set_params(self, parameters):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_4SEIR_5set_params(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_4SEIR_5set_params(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_params (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_4SEIR_4set_params(((struct __pyx_obj_6pyross_9inference_SEIR *)__pyx_v_self), ((PyObject *)__pyx_v_parameters));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_4SEIR_4set_params(struct __pyx_obj_6pyross_9inference_SEIR *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_params", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyross.inference.SEIR.set_params", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4418:         super().set_params(parameters)
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4418, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6pyross_9inference_SEIR));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6pyross_9inference_SEIR));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_ptype_6pyross_9inference_SEIR));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self));
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4418, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_set_params); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4418, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_parameters);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4418, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4419:         self.gE = pyross.utils.age_dep_rates(parameters['gE'], self.M, 'gE')
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_age_dep_rates); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_v_parameters, __pyx_n_u_gE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_3, __pyx_t_4, __pyx_n_u_gE};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4419, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_3, __pyx_t_4, __pyx_n_u_gE};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4419, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4419, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_4);
    __Pyx_INCREF(__pyx_n_u_gE);
    __Pyx_GIVEREF(__pyx_n_u_gE);
    PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_n_u_gE);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4419, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4419, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->gE);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->gE));
  __pyx_v_self->gE = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
 4420: 
+4421:     def set_det_model(self, parameters):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_4SEIR_7set_det_model(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_4SEIR_7set_det_model(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_det_model (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_4SEIR_6set_det_model(((struct __pyx_obj_6pyross_9inference_SEIR *)__pyx_v_self), ((PyObject *)__pyx_v_parameters));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_4SEIR_6set_det_model(struct __pyx_obj_6pyross_9inference_SEIR *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_det_model", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyross.inference.SEIR.set_det_model", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4422:         self.det_model = pyross.deterministic.SEIR(parameters, self.M, self.fi*self.Omega)
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.Omega); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyNumber_Multiply(((PyObject *)__pyx_v_self->__pyx_base.fi), __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_parameters);
  __Pyx_GIVEREF(__pyx_v_parameters);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_parameters);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6pyross_13deterministic_SEIR), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->det_model);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->det_model));
  __pyx_v_self->det_model = ((struct __pyx_obj_6pyross_13deterministic_SEIR *)__pyx_t_3);
  __pyx_t_3 = 0;
 4423: 
+4424:     def make_params_dict(self):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_4SEIR_9make_params_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_4SEIR_9make_params_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_params_dict (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_4SEIR_8make_params_dict(((struct __pyx_obj_6pyross_9inference_SEIR *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_4SEIR_8make_params_dict(struct __pyx_obj_6pyross_9inference_SEIR *__pyx_v_self) {
  PyObject *__pyx_v_parameters = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_params_dict", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SEIR.make_params_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_parameters);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4425:         parameters = {'alpha':self.alpha, 'beta':self.beta, 'gIa':self.gIa,
  __pyx_t_1 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_alpha, ((PyObject *)__pyx_v_self->__pyx_base.alpha)) < 0) __PYX_ERR(0, 4425, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_beta, ((PyObject *)__pyx_v_self->__pyx_base.beta)) < 0) __PYX_ERR(0, 4425, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_gIa, ((PyObject *)__pyx_v_self->__pyx_base.gIa)) < 0) __PYX_ERR(0, 4425, __pyx_L1_error)
+4426:                             'gIs':self.gIs, 'gE':self.gE, 'fsa':self.fsa}
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_gIs, ((PyObject *)__pyx_v_self->__pyx_base.gIs)) < 0) __PYX_ERR(0, 4425, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_gE, ((PyObject *)__pyx_v_self->gE)) < 0) __PYX_ERR(0, 4425, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_fsa, ((PyObject *)__pyx_v_self->__pyx_base.fsa)) < 0) __PYX_ERR(0, 4425, __pyx_L1_error)
  __pyx_v_parameters = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4427:         return parameters
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_parameters);
  __pyx_r = __pyx_v_parameters;
  goto __pyx_L0;
 4428: 
+4429:     cdef compute_jacobian_and_b_matrix(self, double [:] x, double t,
static PyObject *__pyx_f_6pyross_9inference_4SEIR_compute_jacobian_and_b_matrix(struct __pyx_obj_6pyross_9inference_SEIR *__pyx_v_self, __Pyx_memviewslice __pyx_v_x, double __pyx_v_t, struct __pyx_opt_args_6pyross_9inference_4SEIR_compute_jacobian_and_b_matrix *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyross.inference.SEIR.compute_jacobian_and_b_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_s, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_e, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Ia, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Is, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_l, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_6pyross_9inference_4SEIR_compute_jacobian_and_b_matrix {
  int __pyx_n;
  PyObject *b_matrix;
  PyObject *jacobian;
};
+4430:                                             b_matrix=True, jacobian=False):
  PyObject *__pyx_v_b_matrix = ((PyObject *)Py_True);
  PyObject *__pyx_v_jacobian = ((PyObject *)Py_False);
  __Pyx_memviewslice __pyx_v_s = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_e = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Ia = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Is = { 0, 0, { 0 }, { 0 }, { 0 } };
  Py_ssize_t __pyx_v_M;
  __Pyx_memviewslice __pyx_v_l = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("compute_jacobian_and_b_matrix", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_b_matrix = __pyx_optional_args->b_matrix;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_jacobian = __pyx_optional_args->jacobian;
      }
    }
  }
 4431:         cdef:
 4432:             double [:] s, e, Ia, Is
+4433:             Py_ssize_t M=self.M
  __pyx_t_1 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_1;
+4434:         s = x[0:M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    0,
    __pyx_v_M,
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4434, __pyx_L1_error)
}

__pyx_v_s = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4435:         e = x[M:2*M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    __pyx_v_M,
    (2 * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4435, __pyx_L1_error)
}

__pyx_v_e = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4436:         Ia = x[2*M:3*M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    (2 * __pyx_v_M),
    (3 * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4436, __pyx_L1_error)
}

__pyx_v_Ia = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4437:         Is = x[3*M:4*M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    (3 * __pyx_v_M),
    (4 * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4437, __pyx_L1_error)
}

__pyx_v_Is = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4438:         self.CM = self.contactMatrix(t)
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_t); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_self->__pyx_base.contactMatrix);
  __pyx_t_6 = __pyx_v_self->__pyx_base.contactMatrix; __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4438, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.CM);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.CM));
  __pyx_v_self->__pyx_base.CM = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
+4439:         cdef double [:] l=np.zeros((M), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 4439, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4439, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_l = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4440:         self.fill_lambdas(Ia, Is, l)
  __pyx_t_7 = ((struct __pyx_vtabstruct_6pyross_9inference_SEIR *)__pyx_v_self->__pyx_base.__pyx_vtab)->fill_lambdas(__pyx_v_self, __pyx_v_Ia, __pyx_v_Is, __pyx_v_l); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4440, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4441:         if b_matrix:
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_b_matrix); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4441, __pyx_L1_error)
  if (__pyx_t_8) {
/* … */
  }
+4442:             self.noise_correlation(s, e, Ia, Is, l)
    __pyx_t_7 = ((struct __pyx_vtabstruct_6pyross_9inference_SEIR *)__pyx_v_self->__pyx_base.__pyx_vtab)->noise_correlation(__pyx_v_self, __pyx_v_s, __pyx_v_e, __pyx_v_Ia, __pyx_v_Is, __pyx_v_l); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4442, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4443:         if jacobian:
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_jacobian); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4443, __pyx_L1_error)
  if (__pyx_t_8) {
/* … */
  }
+4444:             self.jacobian(s, l)
    __pyx_t_7 = ((struct __pyx_vtabstruct_6pyross_9inference_SEIR *)__pyx_v_self->__pyx_base.__pyx_vtab)->jacobian(__pyx_v_self, __pyx_v_s, __pyx_v_l); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4444, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 4445: 
+4446:     cdef fill_lambdas(self, double [:] Ia, double [:] Is, double [:] l):
static PyObject *__pyx_f_6pyross_9inference_4SEIR_fill_lambdas(struct __pyx_obj_6pyross_9inference_SEIR *__pyx_v_self, __Pyx_memviewslice __pyx_v_Ia, __Pyx_memviewslice __pyx_v_Is, __Pyx_memviewslice __pyx_v_l) {
  __Pyx_memviewslice __pyx_v_CM = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fsa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_beta = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fi = { 0, 0, { 0 }, { 0 }, { 0 } };
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_n;
  Py_ssize_t __pyx_v_M;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fill_lambdas", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_AddTraceback("pyross.inference.SEIR.fill_lambdas", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_CM, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fsa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_beta, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fi, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4447:         cdef:
+4448:             double [:, :] CM=self.CM
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(((PyObject *)__pyx_v_self->__pyx_base.CM), PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 4448, __pyx_L1_error)
  __pyx_v_CM = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+4449:             double [:] fsa=self.fsa, beta=self.beta, fi=self.fi
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fsa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4449, __pyx_L1_error)
  __pyx_v_fsa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.beta), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4449, __pyx_L1_error)
  __pyx_v_beta = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fi), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4449, __pyx_L1_error)
  __pyx_v_fi = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4450:             Py_ssize_t m, n, M=self.M
  __pyx_t_3 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_3;
+4451:         for m in range(M):
  __pyx_t_3 = __pyx_v_M;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_m = __pyx_t_5;
+4452:             for n in range(M):
    __pyx_t_6 = __pyx_v_M;
    __pyx_t_7 = __pyx_t_6;
    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
      __pyx_v_n = __pyx_t_8;
+4453:                 l[m] += beta[m]*CM[m,n]*(Ia[n]+fsa[n]*Is[n])/fi[n]
      __pyx_t_9 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_n;
      __pyx_t_12 = __pyx_v_n;
      __pyx_t_13 = __pyx_v_n;
      __pyx_t_14 = __pyx_v_n;
      __pyx_t_15 = __pyx_v_n;
      __pyx_t_16 = __pyx_v_m;
      *((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_16 * __pyx_v_l.strides[0]) )) += ((((*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_9 * __pyx_v_beta.strides[0]) ))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_10 * __pyx_v_CM.strides[0]) ) + __pyx_t_11 * __pyx_v_CM.strides[1]) )))) * ((*((double *) ( /* dim=0 */ (__pyx_v_Ia.data + __pyx_t_12 * __pyx_v_Ia.strides[0]) ))) + ((*((double *) ( /* dim=0 */ (__pyx_v_fsa.data + __pyx_t_13 * __pyx_v_fsa.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_14 * __pyx_v_Is.strides[0]) )))))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_15 * __pyx_v_fi.strides[0]) ))));
    }
  }
 4454: 
+4455:     cdef jacobian(self, double [:] s, double [:] l):
static PyObject *__pyx_f_6pyross_9inference_4SEIR_jacobian(struct __pyx_obj_6pyross_9inference_SEIR *__pyx_v_self, __Pyx_memviewslice __pyx_v_s, __Pyx_memviewslice __pyx_v_l) {
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_n;
  Py_ssize_t __pyx_v_M;
  Py_ssize_t __pyx_v_dim;
  __Pyx_memviewslice __pyx_v_gIa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gIs = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gE = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fsa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_beta = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_alpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_balpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fi = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_J = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_CM = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("jacobian", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_AddTraceback("pyross.inference.SEIR.jacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIs, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gE, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fsa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_beta, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_alpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_balpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fi, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_J, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_CM, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4456:         cdef:
+4457:             Py_ssize_t m, n, M=self.M, dim=self.dim
  __pyx_t_1 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_1;
  __pyx_t_1 = __pyx_v_self->__pyx_base.dim;
  __pyx_v_dim = __pyx_t_1;
+4458:             double [:] gIa=self.gIa, gIs=self.gIs, gE=self.gE, fsa=self.fsa, beta=self.beta
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4458, __pyx_L1_error)
  __pyx_v_gIa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIs), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4458, __pyx_L1_error)
  __pyx_v_gIs = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->gE), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4458, __pyx_L1_error)
  __pyx_v_gE = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fsa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4458, __pyx_L1_error)
  __pyx_v_fsa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.beta), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4458, __pyx_L1_error)
  __pyx_v_beta = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4459:             double [:] alpha=self.alpha, balpha=1-self.alpha, fi=self.fi
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.alpha), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4459, __pyx_L1_error)
  __pyx_v_alpha = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_3 = PyNumber_Subtract(__pyx_int_1, ((PyObject *)__pyx_v_self->__pyx_base.alpha)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4459, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_balpha = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fi), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4459, __pyx_L1_error)
  __pyx_v_fi = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4460:             double [:, :, :, :] J = self.J
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(((PyObject *)__pyx_v_self->__pyx_base.J), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 4460, __pyx_L1_error)
  __pyx_v_J = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
+4461:             double [:, :] CM=self.CM
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(((PyObject *)__pyx_v_self->__pyx_base.CM), PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 4461, __pyx_L1_error)
  __pyx_v_CM = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+4462:         for m in range(M):
  __pyx_t_1 = __pyx_v_M;
  __pyx_t_6 = __pyx_t_1;
  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
    __pyx_v_m = __pyx_t_7;
+4463:             J[0, m, 0, m] = -l[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = 0;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_11 = 0;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_9 * __pyx_v_J.strides[0]) ) + __pyx_t_10 * __pyx_v_J.strides[1]) ) + __pyx_t_11 * __pyx_v_J.strides[2]) ) + __pyx_t_12 * __pyx_v_J.strides[3]) )) = (-(*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_8 * __pyx_v_l.strides[0]) ))));
+4464:             J[1, m, 0, m] = l[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_12 = 1;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_10 = 0;
    __pyx_t_9 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_12 * __pyx_v_J.strides[0]) ) + __pyx_t_11 * __pyx_v_J.strides[1]) ) + __pyx_t_10 * __pyx_v_J.strides[2]) ) + __pyx_t_9 * __pyx_v_J.strides[3]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_8 * __pyx_v_l.strides[0]) )));
+4465:             J[1, m, 1, m] = - gE[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = 1;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_11 = 1;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_9 * __pyx_v_J.strides[0]) ) + __pyx_t_10 * __pyx_v_J.strides[1]) ) + __pyx_t_11 * __pyx_v_J.strides[2]) ) + __pyx_t_12 * __pyx_v_J.strides[3]) )) = (-(*((double *) ( /* dim=0 */ (__pyx_v_gE.data + __pyx_t_8 * __pyx_v_gE.strides[0]) ))));
+4466:             J[2, m, 1, m] = alpha[m]*gE[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_11 = 2;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_9 = 1;
    __pyx_t_13 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_11 * __pyx_v_J.strides[0]) ) + __pyx_t_10 * __pyx_v_J.strides[1]) ) + __pyx_t_9 * __pyx_v_J.strides[2]) ) + __pyx_t_13 * __pyx_v_J.strides[3]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_8 * __pyx_v_alpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_gE.data + __pyx_t_12 * __pyx_v_gE.strides[0]) ))));
+4467:             J[2, m, 2, m] = - gIa[m]
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_8 = 2;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_9 = 2;
    __pyx_t_10 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_8 * __pyx_v_J.strides[0]) ) + __pyx_t_13 * __pyx_v_J.strides[1]) ) + __pyx_t_9 * __pyx_v_J.strides[2]) ) + __pyx_t_10 * __pyx_v_J.strides[3]) )) = (-(*((double *) ( /* dim=0 */ (__pyx_v_gIa.data + __pyx_t_12 * __pyx_v_gIa.strides[0]) ))));
+4468:             J[3, m, 1, m] = balpha[m]*gE[m]
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_9 = 3;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_8 = 1;
    __pyx_t_11 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_9 * __pyx_v_J.strides[0]) ) + __pyx_t_13 * __pyx_v_J.strides[1]) ) + __pyx_t_8 * __pyx_v_J.strides[2]) ) + __pyx_t_11 * __pyx_v_J.strides[3]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_balpha.data + __pyx_t_12 * __pyx_v_balpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_gE.data + __pyx_t_10 * __pyx_v_gE.strides[0]) ))));
+4469:             J[3, m, 3, m] = - gIs[m]
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_12 = 3;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_8 = 3;
    __pyx_t_13 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_12 * __pyx_v_J.strides[0]) ) + __pyx_t_11 * __pyx_v_J.strides[1]) ) + __pyx_t_8 * __pyx_v_J.strides[2]) ) + __pyx_t_13 * __pyx_v_J.strides[3]) )) = (-(*((double *) ( /* dim=0 */ (__pyx_v_gIs.data + __pyx_t_10 * __pyx_v_gIs.strides[0]) ))));
+4470:             for n in range(M):
    __pyx_t_14 = __pyx_v_M;
    __pyx_t_15 = __pyx_t_14;
    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
      __pyx_v_n = __pyx_t_16;
+4471:                 J[0, m, 2, n] = -s[m]*beta[m]*CM[m, n]/fi[n]
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_13 = __pyx_v_m;
      __pyx_t_8 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_n;
      __pyx_t_12 = __pyx_v_n;
      __pyx_t_9 = 0;
      __pyx_t_17 = __pyx_v_m;
      __pyx_t_18 = 2;
      __pyx_t_19 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_9 * __pyx_v_J.strides[0]) ) + __pyx_t_17 * __pyx_v_J.strides[1]) ) + __pyx_t_18 * __pyx_v_J.strides[2]) ) + __pyx_t_19 * __pyx_v_J.strides[3]) )) = ((((-(*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_10 * __pyx_v_s.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_13 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_8 * __pyx_v_CM.strides[0]) ) + __pyx_t_11 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_12 * __pyx_v_fi.strides[0]) ))));
+4472:                 J[0, m, 3, n] = -s[m]*beta[m]*CM[m, n]*fsa[n]/fi[n]
      __pyx_t_12 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_m;
      __pyx_t_8 = __pyx_v_m;
      __pyx_t_13 = __pyx_v_n;
      __pyx_t_10 = __pyx_v_n;
      __pyx_t_19 = __pyx_v_n;
      __pyx_t_18 = 0;
      __pyx_t_17 = __pyx_v_m;
      __pyx_t_9 = 3;
      __pyx_t_20 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_18 * __pyx_v_J.strides[0]) ) + __pyx_t_17 * __pyx_v_J.strides[1]) ) + __pyx_t_9 * __pyx_v_J.strides[2]) ) + __pyx_t_20 * __pyx_v_J.strides[3]) )) = (((((-(*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_12 * __pyx_v_s.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_11 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_8 * __pyx_v_CM.strides[0]) ) + __pyx_t_13 * __pyx_v_CM.strides[1]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_fsa.data + __pyx_t_10 * __pyx_v_fsa.strides[0]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_19 * __pyx_v_fi.strides[0]) ))));
+4473:                 J[1, m, 2, n] = s[m]*beta[m]*CM[m, n]/fi[n]
      __pyx_t_19 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_13 = __pyx_v_m;
      __pyx_t_8 = __pyx_v_n;
      __pyx_t_11 = __pyx_v_n;
      __pyx_t_12 = 1;
      __pyx_t_20 = __pyx_v_m;
      __pyx_t_9 = 2;
      __pyx_t_17 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_12 * __pyx_v_J.strides[0]) ) + __pyx_t_20 * __pyx_v_J.strides[1]) ) + __pyx_t_9 * __pyx_v_J.strides[2]) ) + __pyx_t_17 * __pyx_v_J.strides[3]) )) = ((((*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_19 * __pyx_v_s.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_10 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_13 * __pyx_v_CM.strides[0]) ) + __pyx_t_8 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_11 * __pyx_v_fi.strides[0]) ))));
+4474:                 J[1, m, 3, n] = s[m]*beta[m]*CM[m, n]*fsa[n]/fi[n]
      __pyx_t_11 = __pyx_v_m;
      __pyx_t_8 = __pyx_v_m;
      __pyx_t_13 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_n;
      __pyx_t_19 = __pyx_v_n;
      __pyx_t_17 = __pyx_v_n;
      __pyx_t_9 = 1;
      __pyx_t_20 = __pyx_v_m;
      __pyx_t_12 = 3;
      __pyx_t_18 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_9 * __pyx_v_J.strides[0]) ) + __pyx_t_20 * __pyx_v_J.strides[1]) ) + __pyx_t_12 * __pyx_v_J.strides[2]) ) + __pyx_t_18 * __pyx_v_J.strides[3]) )) = (((((*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_11 * __pyx_v_s.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_8 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_13 * __pyx_v_CM.strides[0]) ) + __pyx_t_10 * __pyx_v_CM.strides[1]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_fsa.data + __pyx_t_19 * __pyx_v_fsa.strides[0]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_17 * __pyx_v_fi.strides[0]) ))));
    }
  }
+4475:         self.J_mat = self.J.reshape((dim, dim))
  __pyx_t_21 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.J), __pyx_n_s_reshape); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4475, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __pyx_t_22 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4475, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __pyx_t_23 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 4475, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_23);
  __pyx_t_24 = PyTuple_New(2); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 4475, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_24);
  __Pyx_GIVEREF(__pyx_t_22);
  PyTuple_SET_ITEM(__pyx_t_24, 0, __pyx_t_22);
  __Pyx_GIVEREF(__pyx_t_23);
  PyTuple_SET_ITEM(__pyx_t_24, 1, __pyx_t_23);
  __pyx_t_22 = 0;
  __pyx_t_23 = 0;
  __pyx_t_23 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_21))) {
    __pyx_t_23 = PyMethod_GET_SELF(__pyx_t_21);
    if (likely(__pyx_t_23)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_21);
      __Pyx_INCREF(__pyx_t_23);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_21, function);
    }
  }
  __pyx_t_3 = (__pyx_t_23) ? __Pyx_PyObject_Call2Args(__pyx_t_21, __pyx_t_23, __pyx_t_24) : __Pyx_PyObject_CallOneArg(__pyx_t_21, __pyx_t_24);
  __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
  __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4475, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4475, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.J_mat);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.J_mat));
  __pyx_v_self->__pyx_base.J_mat = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
 4476: 
+4477:     cdef noise_correlation(self, double [:] s, double [:] e, double [:] Ia, double [:] Is, double [:] l):
static PyObject *__pyx_f_6pyross_9inference_4SEIR_noise_correlation(struct __pyx_obj_6pyross_9inference_SEIR *__pyx_v_self, __Pyx_memviewslice __pyx_v_s, __Pyx_memviewslice __pyx_v_e, __Pyx_memviewslice __pyx_v_Ia, __Pyx_memviewslice __pyx_v_Is, __Pyx_memviewslice __pyx_v_l) {
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_M;
  __Pyx_memviewslice __pyx_v_gIa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gIs = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gE = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_alpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_balpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_B = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("noise_correlation", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_AddTraceback("pyross.inference.SEIR.noise_correlation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIs, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gE, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_alpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_balpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_B, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4478:         cdef:
+4479:             Py_ssize_t m, M=self.M
  __pyx_t_1 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_1;
+4480:             double [:] gIa=self.gIa, gIs=self.gIs, gE=self.gE
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4480, __pyx_L1_error)
  __pyx_v_gIa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIs), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4480, __pyx_L1_error)
  __pyx_v_gIs = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->gE), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4480, __pyx_L1_error)
  __pyx_v_gE = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4481:             double [:] alpha=self.alpha, balpha=1-self.alpha
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.alpha), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4481, __pyx_L1_error)
  __pyx_v_alpha = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_3 = PyNumber_Subtract(__pyx_int_1, ((PyObject *)__pyx_v_self->__pyx_base.alpha)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4481, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_balpha = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4482:             double [:, :, :, :] B = self.B
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(((PyObject *)__pyx_v_self->__pyx_base.B), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 4482, __pyx_L1_error)
  __pyx_v_B = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
+4483:         for m in range(M): # only fill in the upper triangular form
  __pyx_t_1 = __pyx_v_M;
  __pyx_t_5 = __pyx_t_1;
  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
    __pyx_v_m = __pyx_t_6;
+4484:             B[0, m, 0, m] = l[m]*s[m]
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = 0;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_11 = 0;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_9 * __pyx_v_B.strides[0]) ) + __pyx_t_10 * __pyx_v_B.strides[1]) ) + __pyx_t_11 * __pyx_v_B.strides[2]) ) + __pyx_t_12 * __pyx_v_B.strides[3]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_7 * __pyx_v_l.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_8 * __pyx_v_s.strides[0]) ))));
+4485:             B[0, m, 1, m] =  - l[m]*s[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_12 = 0;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_10 = 1;
    __pyx_t_9 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_12 * __pyx_v_B.strides[0]) ) + __pyx_t_11 * __pyx_v_B.strides[1]) ) + __pyx_t_10 * __pyx_v_B.strides[2]) ) + __pyx_t_9 * __pyx_v_B.strides[3]) )) = ((-(*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_8 * __pyx_v_l.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_7 * __pyx_v_s.strides[0]) ))));
+4486:             B[1, m, 1, m] = l[m]*s[m] + gE[m]*e[m]
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_11 = 1;
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_13 = 1;
    __pyx_t_14 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_11 * __pyx_v_B.strides[0]) ) + __pyx_t_12 * __pyx_v_B.strides[1]) ) + __pyx_t_13 * __pyx_v_B.strides[2]) ) + __pyx_t_14 * __pyx_v_B.strides[3]) )) = (((*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_7 * __pyx_v_l.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_8 * __pyx_v_s.strides[0]) )))) + ((*((double *) ( /* dim=0 */ (__pyx_v_gE.data + __pyx_t_9 * __pyx_v_gE.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_10 * __pyx_v_e.strides[0]) )))));
+4487:             B[1, m, 2, m] = -alpha[m]*gE[m]*e[m]
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_7 = 1;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_13 = 2;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_7 * __pyx_v_B.strides[0]) ) + __pyx_t_14 * __pyx_v_B.strides[1]) ) + __pyx_t_13 * __pyx_v_B.strides[2]) ) + __pyx_t_12 * __pyx_v_B.strides[3]) )) = (((-(*((double *) ( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_10 * __pyx_v_alpha.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_gE.data + __pyx_t_9 * __pyx_v_gE.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_8 * __pyx_v_e.strides[0]) ))));
+4488:             B[1, m, 3, m] = -balpha[m]*gE[m]*e[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_12 = 1;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_14 = 3;
    __pyx_t_7 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_12 * __pyx_v_B.strides[0]) ) + __pyx_t_13 * __pyx_v_B.strides[1]) ) + __pyx_t_14 * __pyx_v_B.strides[2]) ) + __pyx_t_7 * __pyx_v_B.strides[3]) )) = (((-(*((double *) ( /* dim=0 */ (__pyx_v_balpha.data + __pyx_t_8 * __pyx_v_balpha.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_gE.data + __pyx_t_9 * __pyx_v_gE.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_10 * __pyx_v_e.strides[0]) ))));
+4489:             B[2, m, 2, m] = alpha[m]*gE[m]*e[m]+gIa[m]*Ia[m]
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_13 = 2;
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_11 = 2;
    __pyx_t_15 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_13 * __pyx_v_B.strides[0]) ) + __pyx_t_12 * __pyx_v_B.strides[1]) ) + __pyx_t_11 * __pyx_v_B.strides[2]) ) + __pyx_t_15 * __pyx_v_B.strides[3]) )) = ((((*((double *) ( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_10 * __pyx_v_alpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_gE.data + __pyx_t_9 * __pyx_v_gE.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_8 * __pyx_v_e.strides[0]) )))) + ((*((double *) ( /* dim=0 */ (__pyx_v_gIa.data + __pyx_t_7 * __pyx_v_gIa.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_Ia.data + __pyx_t_14 * __pyx_v_Ia.strides[0]) )))));
+4490:             B[3, m, 3, m] = balpha[m]*gE[m]*e[m]+gIs[m]*Is[m]
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_15 = 3;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_12 = 3;
    __pyx_t_13 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_15 * __pyx_v_B.strides[0]) ) + __pyx_t_11 * __pyx_v_B.strides[1]) ) + __pyx_t_12 * __pyx_v_B.strides[2]) ) + __pyx_t_13 * __pyx_v_B.strides[3]) )) = ((((*((double *) ( /* dim=0 */ (__pyx_v_balpha.data + __pyx_t_14 * __pyx_v_balpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_gE.data + __pyx_t_7 * __pyx_v_gE.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_8 * __pyx_v_e.strides[0]) )))) + ((*((double *) ( /* dim=0 */ (__pyx_v_gIs.data + __pyx_t_9 * __pyx_v_gIs.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_10 * __pyx_v_Is.strides[0]) )))));
  }
+4491:         self.B_vec = self.B.reshape((self.dim, self.dim))[(self.rows, self.cols)]
  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.B), __pyx_n_s_reshape); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_17 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.dim); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_18 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.dim); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_19 = PyTuple_New(2); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_GIVEREF(__pyx_t_17);
  PyTuple_SET_ITEM(__pyx_t_19, 0, __pyx_t_17);
  __Pyx_GIVEREF(__pyx_t_18);
  PyTuple_SET_ITEM(__pyx_t_19, 1, __pyx_t_18);
  __pyx_t_17 = 0;
  __pyx_t_18 = 0;
  __pyx_t_18 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) {
    __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_16);
    if (likely(__pyx_t_18)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
      __Pyx_INCREF(__pyx_t_18);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_16, function);
    }
  }
  __pyx_t_3 = (__pyx_t_18) ? __Pyx_PyObject_Call2Args(__pyx_t_16, __pyx_t_18, __pyx_t_19) : __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_t_19);
  __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->__pyx_base.rows));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->__pyx_base.rows));
  PyTuple_SET_ITEM(__pyx_t_16, 0, ((PyObject *)__pyx_v_self->__pyx_base.rows));
  __Pyx_INCREF(((PyObject *)__pyx_v_self->__pyx_base.cols));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->__pyx_base.cols));
  PyTuple_SET_ITEM(__pyx_t_16, 1, ((PyObject *)__pyx_v_self->__pyx_base.cols));
  __pyx_t_19 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_16); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (!(likely(((__pyx_t_19) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_19, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4491, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_19);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.B_vec);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.B_vec));
  __pyx_v_self->__pyx_base.B_vec = ((PyArrayObject *)__pyx_t_19);
  __pyx_t_19 = 0;
 4492: 
 4493: 
 4494: @cython.wraparound(False)
 4495: @cython.boundscheck(False)
 4496: @cython.cdivision(True)
 4497: @cython.nonecheck(False)
+4498: cdef class SEAIRQ(SIR_type):
struct __pyx_obj_6pyross_9inference_SEAIRQ {
  struct __pyx_obj_6pyross_9inference_SIR_type __pyx_base;
  PyArrayObject *gE;
  PyArrayObject *gA;
  PyArrayObject *tE;
  PyArrayObject *tA;
  PyArrayObject *tIa;
  PyArrayObject *tIs;
  struct __pyx_obj_6pyross_13deterministic_SEAIRQ *det_model;
};
/* … */
struct __pyx_vtabstruct_6pyross_9inference_SEAIRQ {
  struct __pyx_vtabstruct_6pyross_9inference_SIR_type __pyx_base;
  PyObject *(*fill_lambdas)(struct __pyx_obj_6pyross_9inference_SEAIRQ *, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice);
  PyObject *(*jacobian)(struct __pyx_obj_6pyross_9inference_SEAIRQ *, __Pyx_memviewslice, __Pyx_memviewslice);
  PyObject *(*noise_correlation)(struct __pyx_obj_6pyross_9inference_SEAIRQ *, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice);
};
static struct __pyx_vtabstruct_6pyross_9inference_SEAIRQ *__pyx_vtabptr_6pyross_9inference_SEAIRQ;

 4499:     """
 4500:     Susceptible, Exposed, Asymptomatic and infected, Infected, Removed, Quarantined (SEAIRQ)
 4501: 
 4502:     * Ia: asymptomatic
 4503:     * Is: symptomatic
 4504:     * E: exposed
 4505:     * A: asymptomatic and infectious
 4506:     * Q: quarantined
 4507: 
 4508:     To initialise the SEAIRQ class,
 4509: 
 4510:     Parameters
 4511:     ----------
 4512:     parameters: dict
 4513:         Contains the following keys:
 4514: 
 4515:         alpha: float or np.array(M)
 4516:             Fraction of infected who are asymptomatic.
 4517:         beta: float
 4518:             Rate of spread of infection.
 4519:         gIa: float
 4520:             Rate of removal from asymptomatic individuals.
 4521:         gIs: float
 4522:             Rate of removal from symptomatic individuals.
 4523:         gE: float
 4524:             rate of removal from exposed individuals.
 4525:         gA: float
 4526:             rate of removal from activated individuals.
 4527:         fsa: float
 4528:             Fraction by which symptomatic individuals do not self-isolate.
 4529:         tE: float
 4530:             testing rate and contact tracing of exposeds
 4531:         tA: float
 4532:             testing rate and contact tracing of activateds
 4533:         tIa: float
 4534:             testing rate and contact tracing of asymptomatics
 4535:         tIs: float
 4536:             testing rate and contact tracing of symptomatics
 4537:     M: int
 4538:         Number of compartments
 4539:     fi: float numpy.array
 4540:         Number of people in each compartment divided by Omega.
 4541:     Omega: float, optional
 4542:         System size, e.g. total population. Default is 1.
 4543:     steps: int, optional
 4544:         The number of internal integration steps performed between the observed points (not used in tangent space inference).
 4545:         For robustness, set steps to be large, lyapunov_method='LSODA'.
 4546:         For speed, set steps to be small (~4), lyapunov_method='euler'.
 4547:         For a combination of the two, choose something in between.
 4548:     det_method: str, optional
 4549:         The integration method used for deterministic integration.
 4550:         Choose one of 'LSODA' and 'RK45'. Default is 'LSODA'.
 4551:     lyapunov_method: str, optional
 4552:         The integration method used for the integration of the Lyapunov equation for the covariance.
 4553:         Choose one of 'LSODA', 'RK45', 'RK2', 'RK4' and 'euler'. Default is 'LSODA'.
 4554:     rtol_det: float, optional
 4555:         relative tolerance for the deterministic integrator (default 1e-3)
 4556:     rtol_lyapunov: float, optional
 4557:         relative tolerance for the Lyapunov-type integrator (default 1e-3)
 4558:     max_steps_det: int, optional
 4559:         Maximum number of integration steps (total) for the deterministic integrator. Default: unlimited (represented as 0)
 4560:         Parameters for which the integrator reaches max_steps_det are disregarded by the optimiser.
 4561:     max_steps_lyapunov: int, optional
 4562:         Maximum number of integration steps (total) for the Lyapunov-type integrator. Default: unlimited (represented as 0)
 4563:         Parameters for which the integrator reaches max_steps_lyapunov are disregarded by the optimiser.
 4564:     """
 4565: 
 4566:     cdef:
+4567:         readonly np.ndarray gE, gA, tE, tA, tIa, tIs
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_2gE_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_2gE_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_6SEAIRQ_2gE___get__(((struct __pyx_obj_6pyross_9inference_SEAIRQ *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_6SEAIRQ_2gE___get__(struct __pyx_obj_6pyross_9inference_SEAIRQ *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->gE));
  __pyx_r = ((PyObject *)__pyx_v_self->gE);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_2gA_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_2gA_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_6SEAIRQ_2gA___get__(((struct __pyx_obj_6pyross_9inference_SEAIRQ *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_6SEAIRQ_2gA___get__(struct __pyx_obj_6pyross_9inference_SEAIRQ *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->gA));
  __pyx_r = ((PyObject *)__pyx_v_self->gA);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_2tE_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_2tE_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_6SEAIRQ_2tE___get__(((struct __pyx_obj_6pyross_9inference_SEAIRQ *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_6SEAIRQ_2tE___get__(struct __pyx_obj_6pyross_9inference_SEAIRQ *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->tE));
  __pyx_r = ((PyObject *)__pyx_v_self->tE);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_2tA_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_2tA_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_6SEAIRQ_2tA___get__(((struct __pyx_obj_6pyross_9inference_SEAIRQ *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_6SEAIRQ_2tA___get__(struct __pyx_obj_6pyross_9inference_SEAIRQ *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->tA));
  __pyx_r = ((PyObject *)__pyx_v_self->tA);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_3tIa_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_3tIa_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_6SEAIRQ_3tIa___get__(((struct __pyx_obj_6pyross_9inference_SEAIRQ *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_6SEAIRQ_3tIa___get__(struct __pyx_obj_6pyross_9inference_SEAIRQ *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->tIa));
  __pyx_r = ((PyObject *)__pyx_v_self->tIa);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_3tIs_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_3tIs_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_6SEAIRQ_3tIs___get__(((struct __pyx_obj_6pyross_9inference_SEAIRQ *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_6SEAIRQ_3tIs___get__(struct __pyx_obj_6pyross_9inference_SEAIRQ *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->tIs));
  __pyx_r = ((PyObject *)__pyx_v_self->tIs);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4568:         readonly pyross.deterministic.SEAIRQ det_model
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_9det_model_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_9det_model_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_6SEAIRQ_9det_model___get__(((struct __pyx_obj_6pyross_9inference_SEAIRQ *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_6SEAIRQ_9det_model___get__(struct __pyx_obj_6pyross_9inference_SEAIRQ *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->det_model));
  __pyx_r = ((PyObject *)__pyx_v_self->det_model);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4569: 
+4570:     def __init__(self, parameters, M, fi, Omega=1, steps=4, det_method='LSODA', lyapunov_method='LSODA', rtol_det=1e-3, rtol_lyapunov=1e-3, max_steps_det=0, max_steps_lyapunov=0):
/* Python wrapper */
static int __pyx_pw_6pyross_9inference_6SEAIRQ_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6pyross_9inference_6SEAIRQ_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_parameters = 0;
  PyObject *__pyx_v_M = 0;
  PyObject *__pyx_v_fi = 0;
  PyObject *__pyx_v_Omega = 0;
  PyObject *__pyx_v_steps = 0;
  PyObject *__pyx_v_det_method = 0;
  PyObject *__pyx_v_lyapunov_method = 0;
  PyObject *__pyx_v_rtol_det = 0;
  PyObject *__pyx_v_rtol_lyapunov = 0;
  PyObject *__pyx_v_max_steps_det = 0;
  PyObject *__pyx_v_max_steps_lyapunov = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_parameters,&__pyx_n_s_M,&__pyx_n_s_fi,&__pyx_n_s_Omega,&__pyx_n_s_steps,&__pyx_n_s_det_method,&__pyx_n_s_lyapunov_method,&__pyx_n_s_rtol_det,&__pyx_n_s_rtol_lyapunov,&__pyx_n_s_max_steps_det,&__pyx_n_s_max_steps_lyapunov,0};
    PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0};
    values[3] = ((PyObject *)__pyx_int_1);
    values[4] = ((PyObject *)__pyx_int_4);
    values[5] = ((PyObject *)__pyx_n_u_LSODA);
    values[6] = ((PyObject *)__pyx_n_u_LSODA);
    values[7] = ((PyObject *)__pyx_float_1eneg_3);
    values[8] = ((PyObject *)__pyx_float_1eneg_3);
    values[9] = ((PyObject *)__pyx_int_0);
    values[10] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_parameters)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, 1); __PYX_ERR(0, 4570, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fi)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, 2); __PYX_ERR(0, 4570, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Omega);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_steps);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_det_method);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lyapunov_method);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol_det);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol_lyapunov);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps_det);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps_lyapunov);
          if (value) { values[10] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 4570, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_parameters = values[0];
    __pyx_v_M = values[1];
    __pyx_v_fi = values[2];
    __pyx_v_Omega = values[3];
    __pyx_v_steps = values[4];
    __pyx_v_det_method = values[5];
    __pyx_v_lyapunov_method = values[6];
    __pyx_v_rtol_det = values[7];
    __pyx_v_rtol_lyapunov = values[8];
    __pyx_v_max_steps_det = values[9];
    __pyx_v_max_steps_lyapunov = values[10];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4570, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SEAIRQ.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_6SEAIRQ___init__(((struct __pyx_obj_6pyross_9inference_SEAIRQ *)__pyx_v_self), __pyx_v_parameters, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6pyross_9inference_6SEAIRQ___init__(struct __pyx_obj_6pyross_9inference_SEAIRQ *__pyx_v_self, PyObject *__pyx_v_parameters, PyObject *__pyx_v_M, PyObject *__pyx_v_fi, PyObject *__pyx_v_Omega, PyObject *__pyx_v_steps, PyObject *__pyx_v_det_method, PyObject *__pyx_v_lyapunov_method, PyObject *__pyx_v_rtol_det, PyObject *__pyx_v_rtol_lyapunov, PyObject *__pyx_v_max_steps_det, PyObject *__pyx_v_max_steps_lyapunov) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pyross.inference.SEAIRQ.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4571:         self.param_keys = ['alpha', 'beta', 'gE', 'gA', \
  __pyx_t_1 = PyList_New(11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_u_alpha);
  __Pyx_GIVEREF(__pyx_n_u_alpha);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_alpha);
  __Pyx_INCREF(__pyx_n_u_beta);
  __Pyx_GIVEREF(__pyx_n_u_beta);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_u_beta);
  __Pyx_INCREF(__pyx_n_u_gE);
  __Pyx_GIVEREF(__pyx_n_u_gE);
  PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_u_gE);
  __Pyx_INCREF(__pyx_n_u_gA);
  __Pyx_GIVEREF(__pyx_n_u_gA);
  PyList_SET_ITEM(__pyx_t_1, 3, __pyx_n_u_gA);
  __Pyx_INCREF(__pyx_n_u_gIa);
  __Pyx_GIVEREF(__pyx_n_u_gIa);
  PyList_SET_ITEM(__pyx_t_1, 4, __pyx_n_u_gIa);
  __Pyx_INCREF(__pyx_n_u_gIs);
  __Pyx_GIVEREF(__pyx_n_u_gIs);
  PyList_SET_ITEM(__pyx_t_1, 5, __pyx_n_u_gIs);
  __Pyx_INCREF(__pyx_n_u_fsa);
  __Pyx_GIVEREF(__pyx_n_u_fsa);
  PyList_SET_ITEM(__pyx_t_1, 6, __pyx_n_u_fsa);
  __Pyx_INCREF(__pyx_n_u_tE);
  __Pyx_GIVEREF(__pyx_n_u_tE);
  PyList_SET_ITEM(__pyx_t_1, 7, __pyx_n_u_tE);
  __Pyx_INCREF(__pyx_n_u_tA);
  __Pyx_GIVEREF(__pyx_n_u_tA);
  PyList_SET_ITEM(__pyx_t_1, 8, __pyx_n_u_tA);
  __Pyx_INCREF(__pyx_n_u_tIa);
  __Pyx_GIVEREF(__pyx_n_u_tIa);
  PyList_SET_ITEM(__pyx_t_1, 9, __pyx_n_u_tIa);
  __Pyx_INCREF(__pyx_n_u_tIs);
  __Pyx_GIVEREF(__pyx_n_u_tIs);
  PyList_SET_ITEM(__pyx_t_1, 10, __pyx_n_u_tIs);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.param_keys);
  __Pyx_DECREF(__pyx_v_self->__pyx_base.param_keys);
  __pyx_v_self->__pyx_base.param_keys = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 4572:                            'gIa', 'gIs', 'fsa', \
 4573:                            'tE', 'tA', 'tIa', 'tIs']
+4574:         super().__init__(parameters, 6, M, fi, Omega, steps, det_method, lyapunov_method, rtol_det, rtol_lyapunov, max_steps_det, max_steps_lyapunov)
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6pyross_9inference_SEAIRQ));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6pyross_9inference_SEAIRQ));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_ptype_6pyross_9inference_SEAIRQ));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self));
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[13] = {__pyx_t_3, __pyx_v_parameters, __pyx_int_6, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 12+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4574, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[13] = {__pyx_t_3, __pyx_v_parameters, __pyx_int_6, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 12+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4574, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(12+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4574, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_parameters);
    __Pyx_GIVEREF(__pyx_v_parameters);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_parameters);
    __Pyx_INCREF(__pyx_int_6);
    __Pyx_GIVEREF(__pyx_int_6);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_int_6);
    __Pyx_INCREF(__pyx_v_M);
    __Pyx_GIVEREF(__pyx_v_M);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_M);
    __Pyx_INCREF(__pyx_v_fi);
    __Pyx_GIVEREF(__pyx_v_fi);
    PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_v_fi);
    __Pyx_INCREF(__pyx_v_Omega);
    __Pyx_GIVEREF(__pyx_v_Omega);
    PyTuple_SET_ITEM(__pyx_t_5, 4+__pyx_t_4, __pyx_v_Omega);
    __Pyx_INCREF(__pyx_v_steps);
    __Pyx_GIVEREF(__pyx_v_steps);
    PyTuple_SET_ITEM(__pyx_t_5, 5+__pyx_t_4, __pyx_v_steps);
    __Pyx_INCREF(__pyx_v_det_method);
    __Pyx_GIVEREF(__pyx_v_det_method);
    PyTuple_SET_ITEM(__pyx_t_5, 6+__pyx_t_4, __pyx_v_det_method);
    __Pyx_INCREF(__pyx_v_lyapunov_method);
    __Pyx_GIVEREF(__pyx_v_lyapunov_method);
    PyTuple_SET_ITEM(__pyx_t_5, 7+__pyx_t_4, __pyx_v_lyapunov_method);
    __Pyx_INCREF(__pyx_v_rtol_det);
    __Pyx_GIVEREF(__pyx_v_rtol_det);
    PyTuple_SET_ITEM(__pyx_t_5, 8+__pyx_t_4, __pyx_v_rtol_det);
    __Pyx_INCREF(__pyx_v_rtol_lyapunov);
    __Pyx_GIVEREF(__pyx_v_rtol_lyapunov);
    PyTuple_SET_ITEM(__pyx_t_5, 9+__pyx_t_4, __pyx_v_rtol_lyapunov);
    __Pyx_INCREF(__pyx_v_max_steps_det);
    __Pyx_GIVEREF(__pyx_v_max_steps_det);
    PyTuple_SET_ITEM(__pyx_t_5, 10+__pyx_t_4, __pyx_v_max_steps_det);
    __Pyx_INCREF(__pyx_v_max_steps_lyapunov);
    __Pyx_GIVEREF(__pyx_v_max_steps_lyapunov);
    PyTuple_SET_ITEM(__pyx_t_5, 11+__pyx_t_4, __pyx_v_max_steps_lyapunov);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4574, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4575:         self.class_index_dict = {'S':0, 'E':1, 'A':2, 'Ia':3, 'Is':4, 'Q':5}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_S, __pyx_int_0) < 0) __PYX_ERR(0, 4575, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_E, __pyx_int_1) < 0) __PYX_ERR(0, 4575, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_A, __pyx_int_2) < 0) __PYX_ERR(0, 4575, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_Ia, __pyx_int_3) < 0) __PYX_ERR(0, 4575, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_Is, __pyx_int_4) < 0) __PYX_ERR(0, 4575, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_Q, __pyx_int_5) < 0) __PYX_ERR(0, 4575, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.class_index_dict);
  __Pyx_DECREF(__pyx_v_self->__pyx_base.class_index_dict);
  __pyx_v_self->__pyx_base.class_index_dict = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4576:         self.set_det_model(parameters)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_det_model); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_parameters);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4577: 
+4578:     def infection_indices(self):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_3infection_indices(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_3infection_indices(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infection_indices (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_6SEAIRQ_2infection_indices(((struct __pyx_obj_6pyross_9inference_SEAIRQ *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_6SEAIRQ_2infection_indices(CYTHON_UNUSED struct __pyx_obj_6pyross_9inference_SEAIRQ *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infection_indices", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SEAIRQ.infection_indices", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4579:         return [1, 2, 3, 4]
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyList_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_int_1);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_int_2);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyList_SET_ITEM(__pyx_t_1, 2, __pyx_int_3);
  __Pyx_INCREF(__pyx_int_4);
  __Pyx_GIVEREF(__pyx_int_4);
  PyList_SET_ITEM(__pyx_t_1, 3, __pyx_int_4);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4580: 
 4581: 
+4582:     def set_det_model(self, parameters):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_5set_det_model(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_5set_det_model(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_det_model (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_6SEAIRQ_4set_det_model(((struct __pyx_obj_6pyross_9inference_SEAIRQ *)__pyx_v_self), ((PyObject *)__pyx_v_parameters));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_6SEAIRQ_4set_det_model(struct __pyx_obj_6pyross_9inference_SEAIRQ *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_det_model", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyross.inference.SEAIRQ.set_det_model", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4583:         self.det_model = pyross.deterministic.SEAIRQ(parameters, self.M, self.fi*self.Omega)
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4583, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.Omega); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4583, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyNumber_Multiply(((PyObject *)__pyx_v_self->__pyx_base.fi), __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4583, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4583, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_parameters);
  __Pyx_GIVEREF(__pyx_v_parameters);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_parameters);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6pyross_13deterministic_SEAIRQ), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4583, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->det_model);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->det_model));
  __pyx_v_self->det_model = ((struct __pyx_obj_6pyross_13deterministic_SEAIRQ *)__pyx_t_3);
  __pyx_t_3 = 0;
 4584: 
+4585:     def make_params_dict(self):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_7make_params_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_6SEAIRQ_7make_params_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_params_dict (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_6SEAIRQ_6make_params_dict(((struct __pyx_obj_6pyross_9inference_SEAIRQ *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_6SEAIRQ_6make_params_dict(struct __pyx_obj_6pyross_9inference_SEAIRQ *__pyx_v_self) {
  PyObject *__pyx_v_parameters = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_params_dict", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SEAIRQ.make_params_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_parameters);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4586:         parameters = {'alpha':self.alpha,
  __pyx_t_1 = __Pyx_PyDict_NewPresized(12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4586, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_alpha, ((PyObject *)__pyx_v_self->__pyx_base.alpha)) < 0) __PYX_ERR(0, 4586, __pyx_L1_error)
+4587:                       'beta':self.beta,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_beta, ((PyObject *)__pyx_v_self->__pyx_base.beta)) < 0) __PYX_ERR(0, 4586, __pyx_L1_error)
+4588:                       'gIa':self.gIa,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_gIa, ((PyObject *)__pyx_v_self->__pyx_base.gIa)) < 0) __PYX_ERR(0, 4586, __pyx_L1_error)
+4589:                       'gIs':self.gIs,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_gIs, ((PyObject *)__pyx_v_self->__pyx_base.gIs)) < 0) __PYX_ERR(0, 4586, __pyx_L1_error)
+4590:                       'gE':self.gE,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_gE, ((PyObject *)__pyx_v_self->gE)) < 0) __PYX_ERR(0, 4586, __pyx_L1_error)
+4591:                       'gA':self.gA,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_gA, ((PyObject *)__pyx_v_self->gA)) < 0) __PYX_ERR(0, 4586, __pyx_L1_error)
+4592:                       'fsa': self.fsa,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_fsa, ((PyObject *)__pyx_v_self->__pyx_base.fsa)) < 0) __PYX_ERR(0, 4586, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_tS, __pyx_int_0) < 0) __PYX_ERR(0, 4586, __pyx_L1_error)
 4593:                       'tS': 0,
+4594:                       'tE': self.tE,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_tE, ((PyObject *)__pyx_v_self->tE)) < 0) __PYX_ERR(0, 4586, __pyx_L1_error)
+4595:                       'tA': self.tA,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_tA, ((PyObject *)__pyx_v_self->tA)) < 0) __PYX_ERR(0, 4586, __pyx_L1_error)
+4596:                       'tIa': self.tIa,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_tIa, ((PyObject *)__pyx_v_self->tIa)) < 0) __PYX_ERR(0, 4586, __pyx_L1_error)
+4597:                       'tIs': self.tIs
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_tIs, ((PyObject *)__pyx_v_self->tIs)) < 0) __PYX_ERR(0, 4586, __pyx_L1_error)
  __pyx_v_parameters = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 4598:                       }
+4599:         return parameters
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_parameters);
  __pyx_r = __pyx_v_parameters;
  goto __pyx_L0;
 4600: 
+4601:     cdef compute_jacobian_and_b_matrix(self, double [:] x, double t,
static PyObject *__pyx_f_6pyross_9inference_6SEAIRQ_compute_jacobian_and_b_matrix(struct __pyx_obj_6pyross_9inference_SEAIRQ *__pyx_v_self, __Pyx_memviewslice __pyx_v_x, double __pyx_v_t, struct __pyx_opt_args_6pyross_9inference_6SEAIRQ_compute_jacobian_and_b_matrix *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyross.inference.SEAIRQ.compute_jacobian_and_b_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_s, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_e, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_a, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Ia, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Is, 1);
  __Pyx_XDECREF(__pyx_v_q);
  __PYX_XDEC_MEMVIEW(&__pyx_v_l, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_6pyross_9inference_6SEAIRQ_compute_jacobian_and_b_matrix {
  int __pyx_n;
  PyObject *b_matrix;
  PyObject *jacobian;
};
+4602:                                         b_matrix=True, jacobian=False):
  PyObject *__pyx_v_b_matrix = ((PyObject *)Py_True);
  PyObject *__pyx_v_jacobian = ((PyObject *)Py_False);
  __Pyx_memviewslice __pyx_v_s = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_e = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_a = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Ia = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Is = { 0, 0, { 0 }, { 0 }, { 0 } };
  Py_ssize_t __pyx_v_M;
  PyObject *__pyx_v_q = NULL;
  __Pyx_memviewslice __pyx_v_l = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("compute_jacobian_and_b_matrix", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_b_matrix = __pyx_optional_args->b_matrix;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_jacobian = __pyx_optional_args->jacobian;
      }
    }
  }
 4603:         cdef:
 4604:             double [:] s, e, a, Ia, Is, Q
+4605:             Py_ssize_t M=self.M
  __pyx_t_1 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_1;
+4606:         s = x[0:M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    0,
    __pyx_v_M,
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4606, __pyx_L1_error)
}

__pyx_v_s = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4607:         e = x[M:2*M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    __pyx_v_M,
    (2 * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4607, __pyx_L1_error)
}

__pyx_v_e = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4608:         a = x[2*M:3*M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    (2 * __pyx_v_M),
    (3 * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4608, __pyx_L1_error)
}

__pyx_v_a = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4609:         Ia = x[3*M:4*M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    (3 * __pyx_v_M),
    (4 * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4609, __pyx_L1_error)
}

__pyx_v_Ia = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4610:         Is = x[4*M:5*M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    (4 * __pyx_v_M),
    (5 * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4610, __pyx_L1_error)
}

__pyx_v_Is = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4611:         q = x[5*M:6*M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    (5 * __pyx_v_M),
    (6 * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4611, __pyx_L1_error)
}

__pyx_t_4 = __pyx_memoryview_fromslice(__pyx_t_2, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4611, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_v_q = __pyx_t_4;
  __pyx_t_4 = 0;
+4612:         self.CM = self.contactMatrix(t)
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_t); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4612, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_self->__pyx_base.contactMatrix);
  __pyx_t_6 = __pyx_v_self->__pyx_base.contactMatrix; __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4612, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4612, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.CM);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.CM));
  __pyx_v_self->__pyx_base.CM = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
+4613:         cdef double [:] l=np.zeros((M), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 4613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_l = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4614:         self.fill_lambdas(a, Ia, Is, l)
  __pyx_t_7 = ((struct __pyx_vtabstruct_6pyross_9inference_SEAIRQ *)__pyx_v_self->__pyx_base.__pyx_vtab)->fill_lambdas(__pyx_v_self, __pyx_v_a, __pyx_v_Ia, __pyx_v_Is, __pyx_v_l); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4615:         if b_matrix:
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_b_matrix); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4615, __pyx_L1_error)
  if (__pyx_t_8) {
/* … */
  }
+4616:             self.noise_correlation(s, e, a, Ia, Is, q, l)
    __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_q, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4616, __pyx_L1_error)
    __pyx_t_7 = ((struct __pyx_vtabstruct_6pyross_9inference_SEAIRQ *)__pyx_v_self->__pyx_base.__pyx_vtab)->noise_correlation(__pyx_v_self, __pyx_v_s, __pyx_v_e, __pyx_v_a, __pyx_v_Ia, __pyx_v_Is, __pyx_t_2, __pyx_v_l); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4616, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
    __pyx_t_2.memview = NULL;
    __pyx_t_2.data = NULL;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4617:         if jacobian:
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_jacobian); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4617, __pyx_L1_error)
  if (__pyx_t_8) {
/* … */
  }
+4618:             self.jacobian(s, l)
    __pyx_t_7 = ((struct __pyx_vtabstruct_6pyross_9inference_SEAIRQ *)__pyx_v_self->__pyx_base.__pyx_vtab)->jacobian(__pyx_v_self, __pyx_v_s, __pyx_v_l); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4618, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 4619: 
+4620:     cdef fill_lambdas(self, double [:] a, double [:] Ia, double [:] Is, double [:] l):
static PyObject *__pyx_f_6pyross_9inference_6SEAIRQ_fill_lambdas(struct __pyx_obj_6pyross_9inference_SEAIRQ *__pyx_v_self, __Pyx_memviewslice __pyx_v_a, __Pyx_memviewslice __pyx_v_Ia, __Pyx_memviewslice __pyx_v_Is, __Pyx_memviewslice __pyx_v_l) {
  __Pyx_memviewslice __pyx_v_CM = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fsa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_beta = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fi = { 0, 0, { 0 }, { 0 }, { 0 } };
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_n;
  Py_ssize_t __pyx_v_M;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fill_lambdas", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_AddTraceback("pyross.inference.SEAIRQ.fill_lambdas", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_CM, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fsa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_beta, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fi, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4621:         cdef:
+4622:             double [:, :] CM=self.CM
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(((PyObject *)__pyx_v_self->__pyx_base.CM), PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 4622, __pyx_L1_error)
  __pyx_v_CM = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+4623:             double [:] fsa=self.fsa, beta=self.beta, fi=self.fi
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fsa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4623, __pyx_L1_error)
  __pyx_v_fsa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.beta), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4623, __pyx_L1_error)
  __pyx_v_beta = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fi), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4623, __pyx_L1_error)
  __pyx_v_fi = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4624:             Py_ssize_t m, n, M=self.M
  __pyx_t_3 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_3;
+4625:         for m in range(M):
  __pyx_t_3 = __pyx_v_M;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_m = __pyx_t_5;
+4626:             for n in range(M):
    __pyx_t_6 = __pyx_v_M;
    __pyx_t_7 = __pyx_t_6;
    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
      __pyx_v_n = __pyx_t_8;
+4627:                 l[m] += beta[m]*CM[m,n]*(Ia[n]+a[n]+fsa[n]*Is[n])/fi[n]
      __pyx_t_9 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_n;
      __pyx_t_12 = __pyx_v_n;
      __pyx_t_13 = __pyx_v_n;
      __pyx_t_14 = __pyx_v_n;
      __pyx_t_15 = __pyx_v_n;
      __pyx_t_16 = __pyx_v_n;
      __pyx_t_17 = __pyx_v_m;
      *((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_17 * __pyx_v_l.strides[0]) )) += ((((*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_9 * __pyx_v_beta.strides[0]) ))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_10 * __pyx_v_CM.strides[0]) ) + __pyx_t_11 * __pyx_v_CM.strides[1]) )))) * (((*((double *) ( /* dim=0 */ (__pyx_v_Ia.data + __pyx_t_12 * __pyx_v_Ia.strides[0]) ))) + (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_13 * __pyx_v_a.strides[0]) )))) + ((*((double *) ( /* dim=0 */ (__pyx_v_fsa.data + __pyx_t_14 * __pyx_v_fsa.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_15 * __pyx_v_Is.strides[0]) )))))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_16 * __pyx_v_fi.strides[0]) ))));
    }
  }
 4628: 
+4629:     cdef jacobian(self, double [:] s, double [:] l):
static PyObject *__pyx_f_6pyross_9inference_6SEAIRQ_jacobian(struct __pyx_obj_6pyross_9inference_SEAIRQ *__pyx_v_self, __Pyx_memviewslice __pyx_v_s, __Pyx_memviewslice __pyx_v_l) {
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_n;
  Py_ssize_t __pyx_v_M;
  Py_ssize_t __pyx_v_dim;
  __Pyx_memviewslice __pyx_v_gE = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gA = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gIa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gIs = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fsa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_tE = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_tA = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_tIa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_tIs = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_beta = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_alpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_balpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fi = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_J = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_CM = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("jacobian", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_AddTraceback("pyross.inference.SEAIRQ.jacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_gE, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gA, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIs, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fsa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_tE, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_tA, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_tIa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_tIs, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_beta, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_alpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_balpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fi, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_J, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_CM, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4630:         cdef:
+4631:             Py_ssize_t m, n, M=self.M, dim=self.dim
  __pyx_t_1 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_1;
  __pyx_t_1 = __pyx_v_self->__pyx_base.dim;
  __pyx_v_dim = __pyx_t_1;
+4632:             double [:] gE=self.gE, gA=self.gA, gIa=self.gIa, gIs=self.gIs, fsa=self.fsa
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->gE), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4632, __pyx_L1_error)
  __pyx_v_gE = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->gA), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4632, __pyx_L1_error)
  __pyx_v_gA = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4632, __pyx_L1_error)
  __pyx_v_gIa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIs), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4632, __pyx_L1_error)
  __pyx_v_gIs = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fsa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4632, __pyx_L1_error)
  __pyx_v_fsa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4633:             double [:] tE=self.tE, tA=self.tE, tIa=self.tIa, tIs=self.tIs, beta=self.beta
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->tE), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4633, __pyx_L1_error)
  __pyx_v_tE = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->tE), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4633, __pyx_L1_error)
  __pyx_v_tA = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->tIa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4633, __pyx_L1_error)
  __pyx_v_tIa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->tIs), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4633, __pyx_L1_error)
  __pyx_v_tIs = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.beta), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4633, __pyx_L1_error)
  __pyx_v_beta = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4634:             double [:] alpha=self.alpha, balpha=1-self.alpha, fi=self.fi
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.alpha), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4634, __pyx_L1_error)
  __pyx_v_alpha = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_3 = PyNumber_Subtract(__pyx_int_1, ((PyObject *)__pyx_v_self->__pyx_base.alpha)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4634, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_balpha = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fi), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4634, __pyx_L1_error)
  __pyx_v_fi = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4635:             double [:, :, :, :] J = self.J
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(((PyObject *)__pyx_v_self->__pyx_base.J), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 4635, __pyx_L1_error)
  __pyx_v_J = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
+4636:             double [:, :] CM=self.CM
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(((PyObject *)__pyx_v_self->__pyx_base.CM), PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 4636, __pyx_L1_error)
  __pyx_v_CM = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+4637:         for m in range(M):
  __pyx_t_1 = __pyx_v_M;
  __pyx_t_6 = __pyx_t_1;
  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
    __pyx_v_m = __pyx_t_7;
+4638:             J[0, m, 0, m] = -l[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = 0;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_11 = 0;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_9 * __pyx_v_J.strides[0]) ) + __pyx_t_10 * __pyx_v_J.strides[1]) ) + __pyx_t_11 * __pyx_v_J.strides[2]) ) + __pyx_t_12 * __pyx_v_J.strides[3]) )) = (-(*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_8 * __pyx_v_l.strides[0]) ))));
+4639:             J[1, m, 0, m] = l[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_12 = 1;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_10 = 0;
    __pyx_t_9 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_12 * __pyx_v_J.strides[0]) ) + __pyx_t_11 * __pyx_v_J.strides[1]) ) + __pyx_t_10 * __pyx_v_J.strides[2]) ) + __pyx_t_9 * __pyx_v_J.strides[3]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_8 * __pyx_v_l.strides[0]) )));
+4640:             J[1, m, 1, m] = - gE[m] - tE[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_10 = 1;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_12 = 1;
    __pyx_t_13 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_10 * __pyx_v_J.strides[0]) ) + __pyx_t_11 * __pyx_v_J.strides[1]) ) + __pyx_t_12 * __pyx_v_J.strides[2]) ) + __pyx_t_13 * __pyx_v_J.strides[3]) )) = ((-(*((double *) ( /* dim=0 */ (__pyx_v_gE.data + __pyx_t_8 * __pyx_v_gE.strides[0]) )))) - (*((double *) ( /* dim=0 */ (__pyx_v_tE.data + __pyx_t_9 * __pyx_v_tE.strides[0]) ))));
+4641:             J[2, m, 1, m] = gE[m]
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_8 = 2;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_12 = 1;
    __pyx_t_11 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_8 * __pyx_v_J.strides[0]) ) + __pyx_t_13 * __pyx_v_J.strides[1]) ) + __pyx_t_12 * __pyx_v_J.strides[2]) ) + __pyx_t_11 * __pyx_v_J.strides[3]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_gE.data + __pyx_t_9 * __pyx_v_gE.strides[0]) )));
+4642:             J[2, m, 2, m] = - gA[m] - tA[m]
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_12 = 2;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_8 = 2;
    __pyx_t_10 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_12 * __pyx_v_J.strides[0]) ) + __pyx_t_13 * __pyx_v_J.strides[1]) ) + __pyx_t_8 * __pyx_v_J.strides[2]) ) + __pyx_t_10 * __pyx_v_J.strides[3]) )) = ((-(*((double *) ( /* dim=0 */ (__pyx_v_gA.data + __pyx_t_9 * __pyx_v_gA.strides[0]) )))) - (*((double *) ( /* dim=0 */ (__pyx_v_tA.data + __pyx_t_11 * __pyx_v_tA.strides[0]) ))));
+4643:             J[3, m, 2, m] = alpha[m]*gA[m]
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_10 = 3;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_13 = 2;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_10 * __pyx_v_J.strides[0]) ) + __pyx_t_8 * __pyx_v_J.strides[1]) ) + __pyx_t_13 * __pyx_v_J.strides[2]) ) + __pyx_t_12 * __pyx_v_J.strides[3]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_11 * __pyx_v_alpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_gA.data + __pyx_t_9 * __pyx_v_gA.strides[0]) ))));
+4644:             J[3, m, 3, m] = - gIa[m] - tIa[m]
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_12 = 3;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_8 = 3;
    __pyx_t_10 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_12 * __pyx_v_J.strides[0]) ) + __pyx_t_13 * __pyx_v_J.strides[1]) ) + __pyx_t_8 * __pyx_v_J.strides[2]) ) + __pyx_t_10 * __pyx_v_J.strides[3]) )) = ((-(*((double *) ( /* dim=0 */ (__pyx_v_gIa.data + __pyx_t_9 * __pyx_v_gIa.strides[0]) )))) - (*((double *) ( /* dim=0 */ (__pyx_v_tIa.data + __pyx_t_11 * __pyx_v_tIa.strides[0]) ))));
+4645:             J[4, m, 2, m] = balpha[m]*gA[m]
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_10 = 4;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_13 = 2;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_10 * __pyx_v_J.strides[0]) ) + __pyx_t_8 * __pyx_v_J.strides[1]) ) + __pyx_t_13 * __pyx_v_J.strides[2]) ) + __pyx_t_12 * __pyx_v_J.strides[3]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_balpha.data + __pyx_t_11 * __pyx_v_balpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_gA.data + __pyx_t_9 * __pyx_v_gA.strides[0]) ))));
+4646:             J[4, m, 4, m] = -gIs[m] - tIs[m]
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_12 = 4;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_8 = 4;
    __pyx_t_10 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_12 * __pyx_v_J.strides[0]) ) + __pyx_t_13 * __pyx_v_J.strides[1]) ) + __pyx_t_8 * __pyx_v_J.strides[2]) ) + __pyx_t_10 * __pyx_v_J.strides[3]) )) = ((-(*((double *) ( /* dim=0 */ (__pyx_v_gIs.data + __pyx_t_9 * __pyx_v_gIs.strides[0]) )))) - (*((double *) ( /* dim=0 */ (__pyx_v_tIs.data + __pyx_t_11 * __pyx_v_tIs.strides[0]) ))));
+4647:             J[5, m, 1, m] = tE[m]
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_9 = 5;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_8 = 1;
    __pyx_t_13 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_9 * __pyx_v_J.strides[0]) ) + __pyx_t_10 * __pyx_v_J.strides[1]) ) + __pyx_t_8 * __pyx_v_J.strides[2]) ) + __pyx_t_13 * __pyx_v_J.strides[3]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_tE.data + __pyx_t_11 * __pyx_v_tE.strides[0]) )));
+4648:             J[5, m, 2, m] = tA[m]
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_13 = 5;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_10 = 2;
    __pyx_t_9 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_13 * __pyx_v_J.strides[0]) ) + __pyx_t_8 * __pyx_v_J.strides[1]) ) + __pyx_t_10 * __pyx_v_J.strides[2]) ) + __pyx_t_9 * __pyx_v_J.strides[3]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_tA.data + __pyx_t_11 * __pyx_v_tA.strides[0]) )));
+4649:             J[5, m, 3, m] = tIa[m]
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_9 = 5;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_8 = 3;
    __pyx_t_13 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_9 * __pyx_v_J.strides[0]) ) + __pyx_t_10 * __pyx_v_J.strides[1]) ) + __pyx_t_8 * __pyx_v_J.strides[2]) ) + __pyx_t_13 * __pyx_v_J.strides[3]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_tIa.data + __pyx_t_11 * __pyx_v_tIa.strides[0]) )));
+4650:             J[5, m, 4, m] = tIs[m]
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_13 = 5;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_10 = 4;
    __pyx_t_9 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_13 * __pyx_v_J.strides[0]) ) + __pyx_t_8 * __pyx_v_J.strides[1]) ) + __pyx_t_10 * __pyx_v_J.strides[2]) ) + __pyx_t_9 * __pyx_v_J.strides[3]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_tIs.data + __pyx_t_11 * __pyx_v_tIs.strides[0]) )));
+4651:             for n in range(M):
    __pyx_t_14 = __pyx_v_M;
    __pyx_t_15 = __pyx_t_14;
    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
      __pyx_v_n = __pyx_t_16;
+4652:                 J[0, m, 2, n] = -s[m]*beta[m]*CM[m, n]/fi[n]
      __pyx_t_11 = __pyx_v_m;
      __pyx_t_9 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_8 = __pyx_v_n;
      __pyx_t_13 = __pyx_v_n;
      __pyx_t_12 = 0;
      __pyx_t_17 = __pyx_v_m;
      __pyx_t_18 = 2;
      __pyx_t_19 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_12 * __pyx_v_J.strides[0]) ) + __pyx_t_17 * __pyx_v_J.strides[1]) ) + __pyx_t_18 * __pyx_v_J.strides[2]) ) + __pyx_t_19 * __pyx_v_J.strides[3]) )) = ((((-(*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_11 * __pyx_v_s.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_9 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_10 * __pyx_v_CM.strides[0]) ) + __pyx_t_8 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_13 * __pyx_v_fi.strides[0]) ))));
+4653:                 J[0, m, 3, n] = -s[m]*beta[m]*CM[m, n]/fi[n]
      __pyx_t_13 = __pyx_v_m;
      __pyx_t_8 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_9 = __pyx_v_n;
      __pyx_t_11 = __pyx_v_n;
      __pyx_t_19 = 0;
      __pyx_t_18 = __pyx_v_m;
      __pyx_t_17 = 3;
      __pyx_t_12 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_19 * __pyx_v_J.strides[0]) ) + __pyx_t_18 * __pyx_v_J.strides[1]) ) + __pyx_t_17 * __pyx_v_J.strides[2]) ) + __pyx_t_12 * __pyx_v_J.strides[3]) )) = ((((-(*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_13 * __pyx_v_s.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_8 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_10 * __pyx_v_CM.strides[0]) ) + __pyx_t_9 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_11 * __pyx_v_fi.strides[0]) ))));
+4654:                 J[0, m, 4, n] = -s[m]*beta[m]*CM[m, n]*fsa[n]/fi[n]
      __pyx_t_11 = __pyx_v_m;
      __pyx_t_9 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_8 = __pyx_v_n;
      __pyx_t_13 = __pyx_v_n;
      __pyx_t_12 = __pyx_v_n;
      __pyx_t_17 = 0;
      __pyx_t_18 = __pyx_v_m;
      __pyx_t_19 = 4;
      __pyx_t_20 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_17 * __pyx_v_J.strides[0]) ) + __pyx_t_18 * __pyx_v_J.strides[1]) ) + __pyx_t_19 * __pyx_v_J.strides[2]) ) + __pyx_t_20 * __pyx_v_J.strides[3]) )) = (((((-(*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_11 * __pyx_v_s.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_9 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_10 * __pyx_v_CM.strides[0]) ) + __pyx_t_8 * __pyx_v_CM.strides[1]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_fsa.data + __pyx_t_13 * __pyx_v_fsa.strides[0]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_12 * __pyx_v_fi.strides[0]) ))));
+4655:                 J[1, m, 2, n] = s[m]*beta[m]*CM[m, n]/fi[n]
      __pyx_t_12 = __pyx_v_m;
      __pyx_t_13 = __pyx_v_m;
      __pyx_t_8 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_n;
      __pyx_t_9 = __pyx_v_n;
      __pyx_t_11 = 1;
      __pyx_t_20 = __pyx_v_m;
      __pyx_t_19 = 2;
      __pyx_t_18 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_11 * __pyx_v_J.strides[0]) ) + __pyx_t_20 * __pyx_v_J.strides[1]) ) + __pyx_t_19 * __pyx_v_J.strides[2]) ) + __pyx_t_18 * __pyx_v_J.strides[3]) )) = ((((*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_12 * __pyx_v_s.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_13 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_8 * __pyx_v_CM.strides[0]) ) + __pyx_t_10 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_9 * __pyx_v_fi.strides[0]) ))));
+4656:                 J[1, m, 3, n] = s[m]*beta[m]*CM[m, n]/fi[n]
      __pyx_t_9 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_8 = __pyx_v_m;
      __pyx_t_13 = __pyx_v_n;
      __pyx_t_12 = __pyx_v_n;
      __pyx_t_18 = 1;
      __pyx_t_19 = __pyx_v_m;
      __pyx_t_20 = 3;
      __pyx_t_11 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_18 * __pyx_v_J.strides[0]) ) + __pyx_t_19 * __pyx_v_J.strides[1]) ) + __pyx_t_20 * __pyx_v_J.strides[2]) ) + __pyx_t_11 * __pyx_v_J.strides[3]) )) = ((((*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_9 * __pyx_v_s.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_10 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_8 * __pyx_v_CM.strides[0]) ) + __pyx_t_13 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_12 * __pyx_v_fi.strides[0]) ))));
+4657:                 J[1, m, 4, n] = s[m]*beta[m]*CM[m, n]*fsa[n]/fi[n]
      __pyx_t_12 = __pyx_v_m;
      __pyx_t_13 = __pyx_v_m;
      __pyx_t_8 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_n;
      __pyx_t_9 = __pyx_v_n;
      __pyx_t_11 = __pyx_v_n;
      __pyx_t_20 = 1;
      __pyx_t_19 = __pyx_v_m;
      __pyx_t_18 = 4;
      __pyx_t_17 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_20 * __pyx_v_J.strides[0]) ) + __pyx_t_19 * __pyx_v_J.strides[1]) ) + __pyx_t_18 * __pyx_v_J.strides[2]) ) + __pyx_t_17 * __pyx_v_J.strides[3]) )) = (((((*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_12 * __pyx_v_s.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_13 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_8 * __pyx_v_CM.strides[0]) ) + __pyx_t_10 * __pyx_v_CM.strides[1]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_fsa.data + __pyx_t_9 * __pyx_v_fsa.strides[0]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_11 * __pyx_v_fi.strides[0]) ))));
    }
  }
+4658:         self.J_mat = self.J.reshape((dim, dim))
  __pyx_t_21 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.J), __pyx_n_s_reshape); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4658, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __pyx_t_22 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4658, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __pyx_t_23 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 4658, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_23);
  __pyx_t_24 = PyTuple_New(2); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 4658, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_24);
  __Pyx_GIVEREF(__pyx_t_22);
  PyTuple_SET_ITEM(__pyx_t_24, 0, __pyx_t_22);
  __Pyx_GIVEREF(__pyx_t_23);
  PyTuple_SET_ITEM(__pyx_t_24, 1, __pyx_t_23);
  __pyx_t_22 = 0;
  __pyx_t_23 = 0;
  __pyx_t_23 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_21))) {
    __pyx_t_23 = PyMethod_GET_SELF(__pyx_t_21);
    if (likely(__pyx_t_23)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_21);
      __Pyx_INCREF(__pyx_t_23);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_21, function);
    }
  }
  __pyx_t_3 = (__pyx_t_23) ? __Pyx_PyObject_Call2Args(__pyx_t_21, __pyx_t_23, __pyx_t_24) : __Pyx_PyObject_CallOneArg(__pyx_t_21, __pyx_t_24);
  __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
  __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4658, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4658, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.J_mat);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.J_mat));
  __pyx_v_self->__pyx_base.J_mat = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
 4659: 
+4660:     cdef noise_correlation(self, double [:] s, double [:] e, double [:] a, double [:] Ia, double [:] Is, double [:] q, double [:] l):
static PyObject *__pyx_f_6pyross_9inference_6SEAIRQ_noise_correlation(struct __pyx_obj_6pyross_9inference_SEAIRQ *__pyx_v_self, __Pyx_memviewslice __pyx_v_s, __Pyx_memviewslice __pyx_v_e, __Pyx_memviewslice __pyx_v_a, __Pyx_memviewslice __pyx_v_Ia, __Pyx_memviewslice __pyx_v_Is, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_q, __Pyx_memviewslice __pyx_v_l) {
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_M;
  CYTHON_UNUSED __Pyx_memviewslice __pyx_v_beta = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gIa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gIs = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gE = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gA = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_tE = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_tA = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_tIa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_tIs = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_alpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_balpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_B = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("noise_correlation", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_AddTraceback("pyross.inference.SEAIRQ.noise_correlation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_beta, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIs, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gE, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gA, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_tE, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_tA, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_tIa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_tIs, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_alpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_balpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_B, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4661:         cdef:
+4662:             Py_ssize_t m, M=self.M
  __pyx_t_1 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_1;
+4663:             double [:] beta=self.beta, gIa=self.gIa, gIs=self.gIs, gE=self.gE, gA=self.gA
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.beta), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4663, __pyx_L1_error)
  __pyx_v_beta = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4663, __pyx_L1_error)
  __pyx_v_gIa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIs), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4663, __pyx_L1_error)
  __pyx_v_gIs = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->gE), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4663, __pyx_L1_error)
  __pyx_v_gE = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->gA), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4663, __pyx_L1_error)
  __pyx_v_gA = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4664:             double [:] tE=self.tE, tA=self.tE, tIa=self.tIa, tIs=self.tIs
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->tE), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4664, __pyx_L1_error)
  __pyx_v_tE = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->tE), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4664, __pyx_L1_error)
  __pyx_v_tA = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->tIa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4664, __pyx_L1_error)
  __pyx_v_tIa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->tIs), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4664, __pyx_L1_error)
  __pyx_v_tIs = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4665:             double [:] alpha=self.alpha, balpha=1-self.alpha
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.alpha), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4665, __pyx_L1_error)
  __pyx_v_alpha = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_3 = PyNumber_Subtract(__pyx_int_1, ((PyObject *)__pyx_v_self->__pyx_base.alpha)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4665, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4665, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_balpha = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4666:             double [:, :, :, :] B = self.B
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(((PyObject *)__pyx_v_self->__pyx_base.B), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 4666, __pyx_L1_error)
  __pyx_v_B = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
+4667:         for m in range(M): # only fill in the upper triangular form
  __pyx_t_1 = __pyx_v_M;
  __pyx_t_5 = __pyx_t_1;
  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
    __pyx_v_m = __pyx_t_6;
+4668:             B[0, m, 0, m] = l[m]*s[m]
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = 0;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_11 = 0;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_9 * __pyx_v_B.strides[0]) ) + __pyx_t_10 * __pyx_v_B.strides[1]) ) + __pyx_t_11 * __pyx_v_B.strides[2]) ) + __pyx_t_12 * __pyx_v_B.strides[3]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_7 * __pyx_v_l.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_8 * __pyx_v_s.strides[0]) ))));
+4669:             B[0, m, 1, m] =  - l[m]*s[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_12 = 0;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_10 = 1;
    __pyx_t_9 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_12 * __pyx_v_B.strides[0]) ) + __pyx_t_11 * __pyx_v_B.strides[1]) ) + __pyx_t_10 * __pyx_v_B.strides[2]) ) + __pyx_t_9 * __pyx_v_B.strides[3]) )) = ((-(*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_8 * __pyx_v_l.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_7 * __pyx_v_s.strides[0]) ))));
+4670:             B[1, m, 1, m] = l[m]*s[m] + (gE[m]+tE[m])*e[m]
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_12 = 1;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_14 = 1;
    __pyx_t_15 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_12 * __pyx_v_B.strides[0]) ) + __pyx_t_13 * __pyx_v_B.strides[1]) ) + __pyx_t_14 * __pyx_v_B.strides[2]) ) + __pyx_t_15 * __pyx_v_B.strides[3]) )) = (((*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_7 * __pyx_v_l.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_8 * __pyx_v_s.strides[0]) )))) + (((*((double *) ( /* dim=0 */ (__pyx_v_gE.data + __pyx_t_9 * __pyx_v_gE.strides[0]) ))) + (*((double *) ( /* dim=0 */ (__pyx_v_tE.data + __pyx_t_10 * __pyx_v_tE.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_11 * __pyx_v_e.strides[0]) )))));
+4671:             B[1, m, 2, m] = -gE[m]*e[m]
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_9 = 1;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_7 = 2;
    __pyx_t_15 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_9 * __pyx_v_B.strides[0]) ) + __pyx_t_8 * __pyx_v_B.strides[1]) ) + __pyx_t_7 * __pyx_v_B.strides[2]) ) + __pyx_t_15 * __pyx_v_B.strides[3]) )) = ((-(*((double *) ( /* dim=0 */ (__pyx_v_gE.data + __pyx_t_11 * __pyx_v_gE.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_10 * __pyx_v_e.strides[0]) ))));
+4672:             B[2, m, 2, m] = gE[m]*e[m]+(gA[m]+tA[m])*a[m]
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_15 = __pyx_v_m;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = 2;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_13 = 2;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_9 * __pyx_v_B.strides[0]) ) + __pyx_t_14 * __pyx_v_B.strides[1]) ) + __pyx_t_13 * __pyx_v_B.strides[2]) ) + __pyx_t_12 * __pyx_v_B.strides[3]) )) = (((*((double *) ( /* dim=0 */ (__pyx_v_gE.data + __pyx_t_10 * __pyx_v_gE.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_11 * __pyx_v_e.strides[0]) )))) + (((*((double *) ( /* dim=0 */ (__pyx_v_gA.data + __pyx_t_15 * __pyx_v_gA.strides[0]) ))) + (*((double *) ( /* dim=0 */ (__pyx_v_tA.data + __pyx_t_7 * __pyx_v_tA.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_8 * __pyx_v_a.strides[0]) )))));
+4673:             B[2, m, 3, m] = -alpha[m]*gA[m]*a[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_15 = __pyx_v_m;
    __pyx_t_11 = 2;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_12 = 3;
    __pyx_t_13 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_11 * __pyx_v_B.strides[0]) ) + __pyx_t_10 * __pyx_v_B.strides[1]) ) + __pyx_t_12 * __pyx_v_B.strides[2]) ) + __pyx_t_13 * __pyx_v_B.strides[3]) )) = (((-(*((double *) ( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_8 * __pyx_v_alpha.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_gA.data + __pyx_t_7 * __pyx_v_gA.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_15 * __pyx_v_a.strides[0]) ))));
+4674:             B[2, m, 4, m] = -balpha[m]*gA[m]*a[m]
    __pyx_t_15 = __pyx_v_m;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_13 = 2;
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_10 = 4;
    __pyx_t_11 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_13 * __pyx_v_B.strides[0]) ) + __pyx_t_12 * __pyx_v_B.strides[1]) ) + __pyx_t_10 * __pyx_v_B.strides[2]) ) + __pyx_t_11 * __pyx_v_B.strides[3]) )) = (((-(*((double *) ( /* dim=0 */ (__pyx_v_balpha.data + __pyx_t_15 * __pyx_v_balpha.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_gA.data + __pyx_t_7 * __pyx_v_gA.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_8 * __pyx_v_a.strides[0]) ))));
+4675:             B[3, m, 3, m] = alpha[m]*gA[m]*a[m]+(gIa[m]+tIa[m])*Ia[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_15 = __pyx_v_m;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_13 = 3;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_9 = 3;
    __pyx_t_16 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_13 * __pyx_v_B.strides[0]) ) + __pyx_t_14 * __pyx_v_B.strides[1]) ) + __pyx_t_9 * __pyx_v_B.strides[2]) ) + __pyx_t_16 * __pyx_v_B.strides[3]) )) = ((((*((double *) ( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_8 * __pyx_v_alpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_gA.data + __pyx_t_7 * __pyx_v_gA.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_15 * __pyx_v_a.strides[0]) )))) + (((*((double *) ( /* dim=0 */ (__pyx_v_gIa.data + __pyx_t_11 * __pyx_v_gIa.strides[0]) ))) + (*((double *) ( /* dim=0 */ (__pyx_v_tIa.data + __pyx_t_10 * __pyx_v_tIa.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_Ia.data + __pyx_t_12 * __pyx_v_Ia.strides[0]) )))));
+4676:             B[4, m, 4, m] = balpha[m]*gA[m]*a[m] + (gIs[m]+tIs[m])*Is[m]
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_15 = __pyx_v_m;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_16 = 4;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_14 = 4;
    __pyx_t_13 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_16 * __pyx_v_B.strides[0]) ) + __pyx_t_9 * __pyx_v_B.strides[1]) ) + __pyx_t_14 * __pyx_v_B.strides[2]) ) + __pyx_t_13 * __pyx_v_B.strides[3]) )) = ((((*((double *) ( /* dim=0 */ (__pyx_v_balpha.data + __pyx_t_12 * __pyx_v_balpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_gA.data + __pyx_t_10 * __pyx_v_gA.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_11 * __pyx_v_a.strides[0]) )))) + (((*((double *) ( /* dim=0 */ (__pyx_v_gIs.data + __pyx_t_15 * __pyx_v_gIs.strides[0]) ))) + (*((double *) ( /* dim=0 */ (__pyx_v_tIs.data + __pyx_t_7 * __pyx_v_tIs.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_8 * __pyx_v_Is.strides[0]) )))));
+4677:             B[1, m, 5, m] = -tE[m]*e[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_15 = 1;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_10 = 5;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_15 * __pyx_v_B.strides[0]) ) + __pyx_t_11 * __pyx_v_B.strides[1]) ) + __pyx_t_10 * __pyx_v_B.strides[2]) ) + __pyx_t_12 * __pyx_v_B.strides[3]) )) = ((-(*((double *) ( /* dim=0 */ (__pyx_v_tE.data + __pyx_t_8 * __pyx_v_tE.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_7 * __pyx_v_e.strides[0]) ))));
+4678:             B[2, m, 5, m] = -tA[m]*a[m]
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_12 = 2;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_11 = 5;
    __pyx_t_15 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_12 * __pyx_v_B.strides[0]) ) + __pyx_t_10 * __pyx_v_B.strides[1]) ) + __pyx_t_11 * __pyx_v_B.strides[2]) ) + __pyx_t_15 * __pyx_v_B.strides[3]) )) = ((-(*((double *) ( /* dim=0 */ (__pyx_v_tA.data + __pyx_t_7 * __pyx_v_tA.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_8 * __pyx_v_a.strides[0]) ))));
+4679:             B[3, m, 5, m] = -tIa[m]*Ia[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_15 = 3;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_10 = 5;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_15 * __pyx_v_B.strides[0]) ) + __pyx_t_11 * __pyx_v_B.strides[1]) ) + __pyx_t_10 * __pyx_v_B.strides[2]) ) + __pyx_t_12 * __pyx_v_B.strides[3]) )) = ((-(*((double *) ( /* dim=0 */ (__pyx_v_tIa.data + __pyx_t_8 * __pyx_v_tIa.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_Ia.data + __pyx_t_7 * __pyx_v_Ia.strides[0]) ))));
+4680:             B[4, m, 5, m] = -tIs[m]*Is[m]
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_12 = 4;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_11 = 5;
    __pyx_t_15 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_12 * __pyx_v_B.strides[0]) ) + __pyx_t_10 * __pyx_v_B.strides[1]) ) + __pyx_t_11 * __pyx_v_B.strides[2]) ) + __pyx_t_15 * __pyx_v_B.strides[3]) )) = ((-(*((double *) ( /* dim=0 */ (__pyx_v_tIs.data + __pyx_t_7 * __pyx_v_tIs.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_8 * __pyx_v_Is.strides[0]) ))));
+4681:             B[5, m, 5, m] = tE[m]*e[m]+tA[m]*a[m]+tIa[m]*Ia[m]+tIs[m]*Is[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_7 = __pyx_v_m;
    __pyx_t_15 = __pyx_v_m;
    __pyx_t_11 = __pyx_v_m;
    __pyx_t_10 = __pyx_v_m;
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_9 = 5;
    __pyx_t_16 = __pyx_v_m;
    __pyx_t_17 = 5;
    __pyx_t_18 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_9 * __pyx_v_B.strides[0]) ) + __pyx_t_16 * __pyx_v_B.strides[1]) ) + __pyx_t_17 * __pyx_v_B.strides[2]) ) + __pyx_t_18 * __pyx_v_B.strides[3]) )) = (((((*((double *) ( /* dim=0 */ (__pyx_v_tE.data + __pyx_t_8 * __pyx_v_tE.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_7 * __pyx_v_e.strides[0]) )))) + ((*((double *) ( /* dim=0 */ (__pyx_v_tA.data + __pyx_t_15 * __pyx_v_tA.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_11 * __pyx_v_a.strides[0]) ))))) + ((*((double *) ( /* dim=0 */ (__pyx_v_tIa.data + __pyx_t_10 * __pyx_v_tIa.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_Ia.data + __pyx_t_12 * __pyx_v_Ia.strides[0]) ))))) + ((*((double *) ( /* dim=0 */ (__pyx_v_tIs.data + __pyx_t_13 * __pyx_v_tIs.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_14 * __pyx_v_Is.strides[0]) )))));
  }
+4682:         self.B_vec = self.B.reshape((self.dim, self.dim))[(self.rows, self.cols)]
  __pyx_t_19 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.B), __pyx_n_s_reshape); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_20 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.dim); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 4682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_21 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.dim); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __pyx_t_22 = PyTuple_New(2); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __Pyx_GIVEREF(__pyx_t_20);
  PyTuple_SET_ITEM(__pyx_t_22, 0, __pyx_t_20);
  __Pyx_GIVEREF(__pyx_t_21);
  PyTuple_SET_ITEM(__pyx_t_22, 1, __pyx_t_21);
  __pyx_t_20 = 0;
  __pyx_t_21 = 0;
  __pyx_t_21 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_19))) {
    __pyx_t_21 = PyMethod_GET_SELF(__pyx_t_19);
    if (likely(__pyx_t_21)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_19);
      __Pyx_INCREF(__pyx_t_21);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_19, function);
    }
  }
  __pyx_t_3 = (__pyx_t_21) ? __Pyx_PyObject_Call2Args(__pyx_t_19, __pyx_t_21, __pyx_t_22) : __Pyx_PyObject_CallOneArg(__pyx_t_19, __pyx_t_22);
  __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
  __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __pyx_t_19 = PyTuple_New(2); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->__pyx_base.rows));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->__pyx_base.rows));
  PyTuple_SET_ITEM(__pyx_t_19, 0, ((PyObject *)__pyx_v_self->__pyx_base.rows));
  __Pyx_INCREF(((PyObject *)__pyx_v_self->__pyx_base.cols));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->__pyx_base.cols));
  PyTuple_SET_ITEM(__pyx_t_19, 1, ((PyObject *)__pyx_v_self->__pyx_base.cols));
  __pyx_t_22 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_19); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  if (!(likely(((__pyx_t_22) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_22, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4682, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_22);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.B_vec);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.B_vec));
  __pyx_v_self->__pyx_base.B_vec = ((PyArrayObject *)__pyx_t_22);
  __pyx_t_22 = 0;
 4683: 
 4684: 
 4685: @cython.wraparound(False)
 4686: @cython.boundscheck(False)
 4687: @cython.cdivision(True)
 4688: @cython.nonecheck(False)
+4689: cdef class SEAIRQ_testing(SIR_type):
struct __pyx_obj_6pyross_9inference_SEAIRQ_testing {
  struct __pyx_obj_6pyross_9inference_SIR_type __pyx_base;
  PyArrayObject *gE;
  PyArrayObject *gA;
  PyArrayObject *ars;
  PyArrayObject *kapE;
  PyObject *testRate;
  struct __pyx_obj_6pyross_13deterministic_SEAIRQ_testing *det_model;
};
/* … */
struct __pyx_vtabstruct_6pyross_9inference_SEAIRQ_testing {
  struct __pyx_vtabstruct_6pyross_9inference_SIR_type __pyx_base;
  PyObject *(*fill_lambdas)(struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice);
  PyObject *(*jacobian)(struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice);
  PyObject *(*noise_correlation)(struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice);
};
static struct __pyx_vtabstruct_6pyross_9inference_SEAIRQ_testing *__pyx_vtabptr_6pyross_9inference_SEAIRQ_testing;

 4690:     """
 4691:     Susceptible, Exposed, Asymptomatic and infected, Infected, Removed, Quarantined (SEAIRQ)
 4692:     Ia: asymptomatic
 4693:     Is: symptomatic
 4694:     A : Asymptomatic and infectious
 4695: 
 4696:     * Ia: asymptomatic
 4697:     * Is: symptomatic
 4698:     * E: exposed
 4699:     * A: asymptomatic and infectious
 4700:     * Q: quarantined
 4701: 
 4702:     To initialise the SEAIRQ class,
 4703: 
 4704:     Parameters
 4705:     ----------
 4706:     parameters: dict
 4707:         Contains the following keys:
 4708: 
 4709:         alpha: float or np.array(M)
 4710:             Fraction of infected who are asymptomatic.
 4711:         beta: float
 4712:             Rate of spread of infection.
 4713:         gIa: float
 4714:             Rate of removal from asymptomatic individuals.
 4715:         gIs: float
 4716:             Rate of removal from symptomatic individuals.
 4717:         gE: float
 4718:             rate of removal from exposed individuals.
 4719:         gA: float
 4720:             rate of removal from activated individuals.
 4721:         fsa: float
 4722:             Fraction by which symptomatic individuals do not self-isolate.
 4723:         ars : float
 4724:             fraction of population admissible for random and symptomatic tests
 4725:         kapE : float
 4726:             fraction of positive tests for exposed individuals
 4727:     testRate: python function
 4728:         number of tests per day and age group
 4729:     M: int
 4730:         Number of compartments
 4731:     fi: float numpy.array
 4732:         Number of people in each age group divided by Omega.
 4733:     Omega: float, optional
 4734:         System size, e.g. total population. Default is 1.
 4735:     steps: int, optional
 4736:         The number of internal integration steps performed between the observed points (not used in tangent space inference).
 4737:         For robustness, set steps to be large, lyapunov_method='LSODA'.
 4738:         For speed, set steps to be small (~4), lyapunov_method='euler'.
 4739:         For a combination of the two, choose something in between.
 4740:     det_method: str, optional
 4741:         The integration method used for deterministic integration.
 4742:         Choose one of 'LSODA' and 'RK45'. Default is 'LSODA'.
 4743:     lyapunov_method: str, optional
 4744:         The integration method used for the integration of the Lyapunov equation for the covariance.
 4745:         Choose one of 'LSODA', 'RK45', 'RK2', 'RK4' and 'euler'. Default is 'LSODA'.
 4746:     rtol_det: float, optional
 4747:         relative tolerance for the deterministic integrator (default 1e-3)
 4748:     rtol_lyapunov: float, optional
 4749:         relative tolerance for the Lyapunov-type integrator (default 1e-3)
 4750:     max_steps_det: int, optional
 4751:         Maximum number of integration steps (total) for the deterministic integrator. Default: unlimited (represented as 0)
 4752:         Parameters for which the integrator reaches max_steps_det are disregarded by the optimiser.
 4753:     max_steps_lyapunov: int, optional
 4754:         Maximum number of integration steps (total) for the Lyapunov-type integrator. Default: unlimited (represented as 0)
 4755:         Parameters for which the integrator reaches max_steps_lyapunov are disregarded by the optimiser.
 4756:     """
 4757: 
 4758:     cdef:
+4759:         readonly np.ndarray gE, gA, ars, kapE
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_2gE_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_2gE_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_14SEAIRQ_testing_2gE___get__(((struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_14SEAIRQ_testing_2gE___get__(struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->gE));
  __pyx_r = ((PyObject *)__pyx_v_self->gE);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_2gA_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_2gA_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_14SEAIRQ_testing_2gA___get__(((struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_14SEAIRQ_testing_2gA___get__(struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->gA));
  __pyx_r = ((PyObject *)__pyx_v_self->gA);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_3ars_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_3ars_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_14SEAIRQ_testing_3ars___get__(((struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_14SEAIRQ_testing_3ars___get__(struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->ars));
  __pyx_r = ((PyObject *)__pyx_v_self->ars);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_4kapE_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_4kapE_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_14SEAIRQ_testing_4kapE___get__(((struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_14SEAIRQ_testing_4kapE___get__(struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->kapE));
  __pyx_r = ((PyObject *)__pyx_v_self->kapE);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4760:         readonly object testRate
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_8testRate_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_8testRate_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_14SEAIRQ_testing_8testRate___get__(((struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_14SEAIRQ_testing_8testRate___get__(struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->testRate);
  __pyx_r = __pyx_v_self->testRate;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4761:         readonly pyross.deterministic.SEAIRQ_testing det_model
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_9det_model_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_9det_model_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_14SEAIRQ_testing_9det_model___get__(((struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_14SEAIRQ_testing_9det_model___get__(struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->det_model));
  __pyx_r = ((PyObject *)__pyx_v_self->det_model);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4762: 
+4763:     def __init__(self, parameters, testRate, M, fi, Omega=1, steps=4, det_method='LSODA', lyapunov_method='LSODA', rtol_det=1e-3, rtol_lyapunov=1e-3, max_steps_det=0, max_steps_lyapunov=0):
/* Python wrapper */
static int __pyx_pw_6pyross_9inference_14SEAIRQ_testing_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6pyross_9inference_14SEAIRQ_testing_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_parameters = 0;
  PyObject *__pyx_v_testRate = 0;
  PyObject *__pyx_v_M = 0;
  PyObject *__pyx_v_fi = 0;
  PyObject *__pyx_v_Omega = 0;
  PyObject *__pyx_v_steps = 0;
  PyObject *__pyx_v_det_method = 0;
  PyObject *__pyx_v_lyapunov_method = 0;
  PyObject *__pyx_v_rtol_det = 0;
  PyObject *__pyx_v_rtol_lyapunov = 0;
  PyObject *__pyx_v_max_steps_det = 0;
  PyObject *__pyx_v_max_steps_lyapunov = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_parameters,&__pyx_n_s_testRate,&__pyx_n_s_M,&__pyx_n_s_fi,&__pyx_n_s_Omega,&__pyx_n_s_steps,&__pyx_n_s_det_method,&__pyx_n_s_lyapunov_method,&__pyx_n_s_rtol_det,&__pyx_n_s_rtol_lyapunov,&__pyx_n_s_max_steps_det,&__pyx_n_s_max_steps_lyapunov,0};
    PyObject* values[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
    values[4] = ((PyObject *)__pyx_int_1);
    values[5] = ((PyObject *)__pyx_int_4);
    values[6] = ((PyObject *)__pyx_n_u_LSODA);
    values[7] = ((PyObject *)__pyx_n_u_LSODA);
    values[8] = ((PyObject *)__pyx_float_1eneg_3);
    values[9] = ((PyObject *)__pyx_float_1eneg_3);
    values[10] = ((PyObject *)__pyx_int_0);
    values[11] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_parameters)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_testRate)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 4, 12, 1); __PYX_ERR(0, 4763, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 4, 12, 2); __PYX_ERR(0, 4763, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fi)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 4, 12, 3); __PYX_ERR(0, 4763, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Omega);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_steps);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_det_method);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lyapunov_method);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol_det);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol_lyapunov);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps_det);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps_lyapunov);
          if (value) { values[11] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 4763, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_parameters = values[0];
    __pyx_v_testRate = values[1];
    __pyx_v_M = values[2];
    __pyx_v_fi = values[3];
    __pyx_v_Omega = values[4];
    __pyx_v_steps = values[5];
    __pyx_v_det_method = values[6];
    __pyx_v_lyapunov_method = values[7];
    __pyx_v_rtol_det = values[8];
    __pyx_v_rtol_lyapunov = values[9];
    __pyx_v_max_steps_det = values[10];
    __pyx_v_max_steps_lyapunov = values[11];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 4, 12, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4763, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SEAIRQ_testing.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_14SEAIRQ_testing___init__(((struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *)__pyx_v_self), __pyx_v_parameters, __pyx_v_testRate, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6pyross_9inference_14SEAIRQ_testing___init__(struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *__pyx_v_self, PyObject *__pyx_v_parameters, PyObject *__pyx_v_testRate, PyObject *__pyx_v_M, PyObject *__pyx_v_fi, PyObject *__pyx_v_Omega, PyObject *__pyx_v_steps, PyObject *__pyx_v_det_method, PyObject *__pyx_v_lyapunov_method, PyObject *__pyx_v_rtol_det, PyObject *__pyx_v_rtol_lyapunov, PyObject *__pyx_v_max_steps_det, PyObject *__pyx_v_max_steps_lyapunov) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pyross.inference.SEAIRQ_testing.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4764:         self.param_keys = ['alpha', 'beta', 'gE', 'gA', \
  __pyx_t_1 = PyList_New(9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_u_alpha);
  __Pyx_GIVEREF(__pyx_n_u_alpha);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_alpha);
  __Pyx_INCREF(__pyx_n_u_beta);
  __Pyx_GIVEREF(__pyx_n_u_beta);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_u_beta);
  __Pyx_INCREF(__pyx_n_u_gE);
  __Pyx_GIVEREF(__pyx_n_u_gE);
  PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_u_gE);
  __Pyx_INCREF(__pyx_n_u_gA);
  __Pyx_GIVEREF(__pyx_n_u_gA);
  PyList_SET_ITEM(__pyx_t_1, 3, __pyx_n_u_gA);
  __Pyx_INCREF(__pyx_n_u_gIa);
  __Pyx_GIVEREF(__pyx_n_u_gIa);
  PyList_SET_ITEM(__pyx_t_1, 4, __pyx_n_u_gIa);
  __Pyx_INCREF(__pyx_n_u_gIs);
  __Pyx_GIVEREF(__pyx_n_u_gIs);
  PyList_SET_ITEM(__pyx_t_1, 5, __pyx_n_u_gIs);
  __Pyx_INCREF(__pyx_n_u_fsa);
  __Pyx_GIVEREF(__pyx_n_u_fsa);
  PyList_SET_ITEM(__pyx_t_1, 6, __pyx_n_u_fsa);
  __Pyx_INCREF(__pyx_n_u_ars);
  __Pyx_GIVEREF(__pyx_n_u_ars);
  PyList_SET_ITEM(__pyx_t_1, 7, __pyx_n_u_ars);
  __Pyx_INCREF(__pyx_n_u_kapE);
  __Pyx_GIVEREF(__pyx_n_u_kapE);
  PyList_SET_ITEM(__pyx_t_1, 8, __pyx_n_u_kapE);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.param_keys);
  __Pyx_DECREF(__pyx_v_self->__pyx_base.param_keys);
  __pyx_v_self->__pyx_base.param_keys = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 4765:                            'gIa', 'gIs', 'fsa', \
 4766:                            'ars', 'kapE']
+4767:         super().__init__(parameters, 6, M, fi, Omega, steps, det_method, lyapunov_method, rtol_det, rtol_lyapunov, max_steps_det, max_steps_lyapunov)
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4767, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6pyross_9inference_SEAIRQ_testing));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6pyross_9inference_SEAIRQ_testing));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_ptype_6pyross_9inference_SEAIRQ_testing));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self));
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4767, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4767, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[13] = {__pyx_t_3, __pyx_v_parameters, __pyx_int_6, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 12+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4767, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[13] = {__pyx_t_3, __pyx_v_parameters, __pyx_int_6, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 12+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4767, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(12+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_parameters);
    __Pyx_GIVEREF(__pyx_v_parameters);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_parameters);
    __Pyx_INCREF(__pyx_int_6);
    __Pyx_GIVEREF(__pyx_int_6);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_int_6);
    __Pyx_INCREF(__pyx_v_M);
    __Pyx_GIVEREF(__pyx_v_M);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_M);
    __Pyx_INCREF(__pyx_v_fi);
    __Pyx_GIVEREF(__pyx_v_fi);
    PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_v_fi);
    __Pyx_INCREF(__pyx_v_Omega);
    __Pyx_GIVEREF(__pyx_v_Omega);
    PyTuple_SET_ITEM(__pyx_t_5, 4+__pyx_t_4, __pyx_v_Omega);
    __Pyx_INCREF(__pyx_v_steps);
    __Pyx_GIVEREF(__pyx_v_steps);
    PyTuple_SET_ITEM(__pyx_t_5, 5+__pyx_t_4, __pyx_v_steps);
    __Pyx_INCREF(__pyx_v_det_method);
    __Pyx_GIVEREF(__pyx_v_det_method);
    PyTuple_SET_ITEM(__pyx_t_5, 6+__pyx_t_4, __pyx_v_det_method);
    __Pyx_INCREF(__pyx_v_lyapunov_method);
    __Pyx_GIVEREF(__pyx_v_lyapunov_method);
    PyTuple_SET_ITEM(__pyx_t_5, 7+__pyx_t_4, __pyx_v_lyapunov_method);
    __Pyx_INCREF(__pyx_v_rtol_det);
    __Pyx_GIVEREF(__pyx_v_rtol_det);
    PyTuple_SET_ITEM(__pyx_t_5, 8+__pyx_t_4, __pyx_v_rtol_det);
    __Pyx_INCREF(__pyx_v_rtol_lyapunov);
    __Pyx_GIVEREF(__pyx_v_rtol_lyapunov);
    PyTuple_SET_ITEM(__pyx_t_5, 9+__pyx_t_4, __pyx_v_rtol_lyapunov);
    __Pyx_INCREF(__pyx_v_max_steps_det);
    __Pyx_GIVEREF(__pyx_v_max_steps_det);
    PyTuple_SET_ITEM(__pyx_t_5, 10+__pyx_t_4, __pyx_v_max_steps_det);
    __Pyx_INCREF(__pyx_v_max_steps_lyapunov);
    __Pyx_GIVEREF(__pyx_v_max_steps_lyapunov);
    PyTuple_SET_ITEM(__pyx_t_5, 11+__pyx_t_4, __pyx_v_max_steps_lyapunov);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4768:         self.testRate=testRate
  __Pyx_INCREF(__pyx_v_testRate);
  __Pyx_GIVEREF(__pyx_v_testRate);
  __Pyx_GOTREF(__pyx_v_self->testRate);
  __Pyx_DECREF(__pyx_v_self->testRate);
  __pyx_v_self->testRate = __pyx_v_testRate;
+4769:         self.class_index_dict = {'S':0, 'E':1, 'A':2, 'Ia':3, 'Is':4, 'Q':5}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_S, __pyx_int_0) < 0) __PYX_ERR(0, 4769, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_E, __pyx_int_1) < 0) __PYX_ERR(0, 4769, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_A, __pyx_int_2) < 0) __PYX_ERR(0, 4769, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_Ia, __pyx_int_3) < 0) __PYX_ERR(0, 4769, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_Is, __pyx_int_4) < 0) __PYX_ERR(0, 4769, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_Q, __pyx_int_5) < 0) __PYX_ERR(0, 4769, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.class_index_dict);
  __Pyx_DECREF(__pyx_v_self->__pyx_base.class_index_dict);
  __pyx_v_self->__pyx_base.class_index_dict = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+4770:         self.make_det_model(parameters)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_make_det_model); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_parameters);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4771: 
+4772:     def infection_indices(self):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_3infection_indices(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_3infection_indices(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infection_indices (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_14SEAIRQ_testing_2infection_indices(((struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_14SEAIRQ_testing_2infection_indices(CYTHON_UNUSED struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infection_indices", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4773:         return (1, 2, 3, 4)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_tuple__43);
  __pyx_r = __pyx_tuple__43;
  goto __pyx_L0;
/* … */
  __pyx_tuple__43 = PyTuple_Pack(4, __pyx_int_1, __pyx_int_2, __pyx_int_3, __pyx_int_4); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 4773, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__43);
  __Pyx_GIVEREF(__pyx_tuple__43);
 4774: 
+4775:     def set_params(self, parameters):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_5set_params(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_5set_params(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_params (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_14SEAIRQ_testing_4set_params(((struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *)__pyx_v_self), ((PyObject *)__pyx_v_parameters));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_14SEAIRQ_testing_4set_params(struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_params", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyross.inference.SEAIRQ_testing.set_params", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4776:         super().set_params(parameters)
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4776, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6pyross_9inference_SEAIRQ_testing));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6pyross_9inference_SEAIRQ_testing));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_ptype_6pyross_9inference_SEAIRQ_testing));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self));
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4776, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_set_params); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4776, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_parameters);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4776, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4777:         self.gE = pyross.utils.age_dep_rates(parameters['gE'], self.M, 'gE')
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4777, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4777, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_age_dep_rates); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4777, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_v_parameters, __pyx_n_u_gE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4777, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4777, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_3, __pyx_t_4, __pyx_n_u_gE};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4777, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_3, __pyx_t_4, __pyx_n_u_gE};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4777, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4777, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_4);
    __Pyx_INCREF(__pyx_n_u_gE);
    __Pyx_GIVEREF(__pyx_n_u_gE);
    PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_n_u_gE);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4777, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4777, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->gE);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->gE));
  __pyx_v_self->gE = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+4778:         self.gA = pyross.utils.age_dep_rates(parameters['gA'], self.M, 'gA')
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_age_dep_rates); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyObject_Dict_GetItem(__pyx_v_parameters, __pyx_n_u_gA); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_t_7, __pyx_t_4, __pyx_n_u_gA};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4778, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_t_7, __pyx_t_4, __pyx_n_u_gA};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4778, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4778, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_6, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_t_4);
    __Pyx_INCREF(__pyx_n_u_gA);
    __Pyx_GIVEREF(__pyx_n_u_gA);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_6, __pyx_n_u_gA);
    __pyx_t_7 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4778, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4778, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->gA);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->gA));
  __pyx_v_self->gA = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+4779:         self.ars = pyross.utils.age_dep_rates(parameters['ars'], self.M, 'ars')
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4779, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4779, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_age_dep_rates); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4779, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_v_parameters, __pyx_n_u_ars); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4779, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4779, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_7, __pyx_t_5, __pyx_t_4, __pyx_n_u_ars};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4779, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_7, __pyx_t_5, __pyx_t_4, __pyx_n_u_ars};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4779, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_3 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4779, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__pyx_t_7) {
      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_7); __pyx_t_7 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_6, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_6, __pyx_t_4);
    __Pyx_INCREF(__pyx_n_u_ars);
    __Pyx_GIVEREF(__pyx_n_u_ars);
    PyTuple_SET_ITEM(__pyx_t_3, 2+__pyx_t_6, __pyx_n_u_ars);
    __pyx_t_5 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4779, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4779, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->ars);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->ars));
  __pyx_v_self->ars = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+4780:         self.kapE = pyross.utils.age_dep_rates(parameters['kapE'], self.M, 'kapE')
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_age_dep_rates); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Dict_GetItem(__pyx_v_parameters, __pyx_n_u_kapE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_3, __pyx_t_4, __pyx_n_u_kapE};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4780, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_3, __pyx_t_4, __pyx_n_u_kapE};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4780, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4780, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_4);
    __Pyx_INCREF(__pyx_n_u_kapE);
    __Pyx_GIVEREF(__pyx_n_u_kapE);
    PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_n_u_kapE);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4780, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4780, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->kapE);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->kapE));
  __pyx_v_self->kapE = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
 4781: 
 4782: 
+4783:     def set_testRate(self, testRate):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_7set_testRate(PyObject *__pyx_v_self, PyObject *__pyx_v_testRate); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_7set_testRate(PyObject *__pyx_v_self, PyObject *__pyx_v_testRate) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_testRate (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_14SEAIRQ_testing_6set_testRate(((struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *)__pyx_v_self), ((PyObject *)__pyx_v_testRate));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_14SEAIRQ_testing_6set_testRate(struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *__pyx_v_self, PyObject *__pyx_v_testRate) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_testRate", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4784:         self.testRate=testRate
  __Pyx_INCREF(__pyx_v_testRate);
  __Pyx_GIVEREF(__pyx_v_testRate);
  __Pyx_GOTREF(__pyx_v_self->testRate);
  __Pyx_DECREF(__pyx_v_self->testRate);
  __pyx_v_self->testRate = __pyx_v_testRate;
 4785: 
+4786:     def make_det_model(self, parameters):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_9make_det_model(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_9make_det_model(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_det_model (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_14SEAIRQ_testing_8make_det_model(((struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *)__pyx_v_self), ((PyObject *)__pyx_v_parameters));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_14SEAIRQ_testing_8make_det_model(struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_det_model", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyross.inference.SEAIRQ_testing.make_det_model", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4787:         self.det_model = pyross.deterministic.SEAIRQ_testing(parameters, self.M, self.fi*self.Omega)
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4787, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.Omega); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4787, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyNumber_Multiply(((PyObject *)__pyx_v_self->__pyx_base.fi), __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4787, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4787, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_parameters);
  __Pyx_GIVEREF(__pyx_v_parameters);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_parameters);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6pyross_13deterministic_SEAIRQ_testing), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4787, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->det_model);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->det_model));
  __pyx_v_self->det_model = ((struct __pyx_obj_6pyross_13deterministic_SEAIRQ_testing *)__pyx_t_3);
  __pyx_t_3 = 0;
+4788:         self.det_model.set_testRate(self.testRate)
  __pyx_t_3 = __pyx_v_self->testRate;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = ((struct __pyx_vtabstruct_6pyross_13deterministic_SEAIRQ_testing *)__pyx_v_self->det_model->__pyx_base.__pyx_vtab)->set_testRate(__pyx_v_self->det_model, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4788, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 4789: 
+4790:     def make_params_dict(self):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_11make_params_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_14SEAIRQ_testing_11make_params_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_params_dict (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_14SEAIRQ_testing_10make_params_dict(((struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_14SEAIRQ_testing_10make_params_dict(struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *__pyx_v_self) {
  PyObject *__pyx_v_parameters = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_params_dict", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SEAIRQ_testing.make_params_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_parameters);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4791:         parameters = {'alpha':self.alpha,
  __pyx_t_1 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4791, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_alpha, ((PyObject *)__pyx_v_self->__pyx_base.alpha)) < 0) __PYX_ERR(0, 4791, __pyx_L1_error)
+4792:                       'beta':self.beta,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_beta, ((PyObject *)__pyx_v_self->__pyx_base.beta)) < 0) __PYX_ERR(0, 4791, __pyx_L1_error)
+4793:                       'gIa':self.gIa,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_gIa, ((PyObject *)__pyx_v_self->__pyx_base.gIa)) < 0) __PYX_ERR(0, 4791, __pyx_L1_error)
+4794:                       'gIs':self.gIs,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_gIs, ((PyObject *)__pyx_v_self->__pyx_base.gIs)) < 0) __PYX_ERR(0, 4791, __pyx_L1_error)
+4795:                       'gE':self.gE,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_gE, ((PyObject *)__pyx_v_self->gE)) < 0) __PYX_ERR(0, 4791, __pyx_L1_error)
+4796:                       'gA':self.gA,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_gA, ((PyObject *)__pyx_v_self->gA)) < 0) __PYX_ERR(0, 4791, __pyx_L1_error)
+4797:                       'fsa': self.fsa,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_fsa, ((PyObject *)__pyx_v_self->__pyx_base.fsa)) < 0) __PYX_ERR(0, 4791, __pyx_L1_error)
+4798:                       'ars': self.ars,
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_ars, ((PyObject *)__pyx_v_self->ars)) < 0) __PYX_ERR(0, 4791, __pyx_L1_error)
+4799:                       'kapE': self.kapE
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_kapE, ((PyObject *)__pyx_v_self->kapE)) < 0) __PYX_ERR(0, 4791, __pyx_L1_error)
  __pyx_v_parameters = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 4800:                       }
+4801:         return parameters
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_parameters);
  __pyx_r = __pyx_v_parameters;
  goto __pyx_L0;
 4802: 
+4803:     cdef compute_jacobian_and_b_matrix(self, double [:] x, double t,
static PyObject *__pyx_f_6pyross_9inference_14SEAIRQ_testing_compute_jacobian_and_b_matrix(struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *__pyx_v_self, __Pyx_memviewslice __pyx_v_x, double __pyx_v_t, struct __pyx_opt_args_6pyross_9inference_14SEAIRQ_testing_compute_jacobian_and_b_matrix *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyross.inference.SEAIRQ_testing.compute_jacobian_and_b_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_s, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_e, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_a, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Ia, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Is, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_TR, 1);
  __Pyx_XDECREF(__pyx_v_q);
  __PYX_XDEC_MEMVIEW(&__pyx_v_l, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_6pyross_9inference_14SEAIRQ_testing_compute_jacobian_and_b_matrix {
  int __pyx_n;
  PyObject *b_matrix;
  PyObject *jacobian;
};
+4804:                                             b_matrix=True, jacobian=False):
  PyObject *__pyx_v_b_matrix = ((PyObject *)Py_True);
  PyObject *__pyx_v_jacobian = ((PyObject *)Py_False);
  __Pyx_memviewslice __pyx_v_s = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_e = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_a = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Ia = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Is = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_TR = { 0, 0, { 0 }, { 0 }, { 0 } };
  Py_ssize_t __pyx_v_M;
  PyObject *__pyx_v_q = NULL;
  __Pyx_memviewslice __pyx_v_l = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("compute_jacobian_and_b_matrix", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_b_matrix = __pyx_optional_args->b_matrix;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_jacobian = __pyx_optional_args->jacobian;
      }
    }
  }
 4805:         cdef:
 4806:             double [:] s, e, a, Ia, Is, Q, TR
+4807:             Py_ssize_t M=self.M
  __pyx_t_1 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_1;
+4808:         s = x[0:M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    0,
    __pyx_v_M,
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4808, __pyx_L1_error)
}

__pyx_v_s = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4809:         e = x[M:2*M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    __pyx_v_M,
    (2 * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4809, __pyx_L1_error)
}

__pyx_v_e = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4810:         a = x[2*M:3*M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    (2 * __pyx_v_M),
    (3 * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4810, __pyx_L1_error)
}

__pyx_v_a = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4811:         Ia = x[3*M:4*M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    (3 * __pyx_v_M),
    (4 * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4811, __pyx_L1_error)
}

__pyx_v_Ia = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4812:         Is = x[4*M:5*M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    (4 * __pyx_v_M),
    (5 * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4812, __pyx_L1_error)
}

__pyx_v_Is = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4813:         q = x[5*M:6*M]
  __pyx_t_2.data = __pyx_v_x.data;
  __pyx_t_2.memview = __pyx_v_x.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_2, 0);
  __pyx_t_3 = -1;
  if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_2,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_3,
    (5 * __pyx_v_M),
    (6 * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 4813, __pyx_L1_error)
}

__pyx_t_4 = __pyx_memoryview_fromslice(__pyx_t_2, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4813, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_v_q = __pyx_t_4;
  __pyx_t_4 = 0;
+4814:         self.CM = self.contactMatrix(t)
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_t); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4814, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_self->__pyx_base.contactMatrix);
  __pyx_t_6 = __pyx_v_self->__pyx_base.contactMatrix; __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4814, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4814, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.CM);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.CM));
  __pyx_v_self->__pyx_base.CM = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
+4815:         TR=self.testRate(t)
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_v_self->testRate);
  __pyx_t_5 = __pyx_v_self->testRate; __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_7, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4815, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_TR = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4816:         cdef double [:] l=np.zeros((M), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 4816, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4816, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_l = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4817:         self.fill_lambdas(a, Ia, Is, l)
  __pyx_t_7 = ((struct __pyx_vtabstruct_6pyross_9inference_SEAIRQ_testing *)__pyx_v_self->__pyx_base.__pyx_vtab)->fill_lambdas(__pyx_v_self, __pyx_v_a, __pyx_v_Ia, __pyx_v_Is, __pyx_v_l); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4817, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4818:         if b_matrix:
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_b_matrix); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4818, __pyx_L1_error)
  if (__pyx_t_8) {
/* … */
  }
+4819:             self.noise_correlation(s, e, a, Ia, Is, q, l, TR)
    __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_q, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4819, __pyx_L1_error)
    __pyx_t_7 = ((struct __pyx_vtabstruct_6pyross_9inference_SEAIRQ_testing *)__pyx_v_self->__pyx_base.__pyx_vtab)->noise_correlation(__pyx_v_self, __pyx_v_s, __pyx_v_e, __pyx_v_a, __pyx_v_Ia, __pyx_v_Is, __pyx_t_2, __pyx_v_l, __pyx_v_TR); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4819, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
    __pyx_t_2.memview = NULL;
    __pyx_t_2.data = NULL;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4820:         if jacobian:
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_jacobian); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4820, __pyx_L1_error)
  if (__pyx_t_8) {
/* … */
  }
+4821:             self.jacobian(s, e, a, Ia, Is, q, l, TR)
    __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_q, PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4821, __pyx_L1_error)
    __pyx_t_7 = ((struct __pyx_vtabstruct_6pyross_9inference_SEAIRQ_testing *)__pyx_v_self->__pyx_base.__pyx_vtab)->jacobian(__pyx_v_self, __pyx_v_s, __pyx_v_e, __pyx_v_a, __pyx_v_Ia, __pyx_v_Is, __pyx_t_2, __pyx_v_l, __pyx_v_TR); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4821, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
    __pyx_t_2.memview = NULL;
    __pyx_t_2.data = NULL;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 4822: 
+4823:     cdef fill_lambdas(self, double [:] a, double [:] Ia, double [:] Is, double [:] l):
static PyObject *__pyx_f_6pyross_9inference_14SEAIRQ_testing_fill_lambdas(struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *__pyx_v_self, __Pyx_memviewslice __pyx_v_a, __Pyx_memviewslice __pyx_v_Ia, __Pyx_memviewslice __pyx_v_Is, __Pyx_memviewslice __pyx_v_l) {
  __Pyx_memviewslice __pyx_v_CM = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fsa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_beta = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fi = { 0, 0, { 0 }, { 0 }, { 0 } };
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_n;
  Py_ssize_t __pyx_v_M;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fill_lambdas", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __Pyx_AddTraceback("pyross.inference.SEAIRQ_testing.fill_lambdas", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_CM, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fsa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_beta, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fi, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4824:         cdef:
+4825:             double [:, :] CM=self.CM
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(((PyObject *)__pyx_v_self->__pyx_base.CM), PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 4825, __pyx_L1_error)
  __pyx_v_CM = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+4826:             double [:] fsa=self.fsa, beta=self.beta, fi=self.fi
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fsa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4826, __pyx_L1_error)
  __pyx_v_fsa = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.beta), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4826, __pyx_L1_error)
  __pyx_v_beta = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fi), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 4826, __pyx_L1_error)
  __pyx_v_fi = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+4827:             Py_ssize_t m, n, M=self.M
  __pyx_t_3 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_3;
+4828:         for m in range(M):
  __pyx_t_3 = __pyx_v_M;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_m = __pyx_t_5;
+4829:             for n in range(M):
    __pyx_t_6 = __pyx_v_M;
    __pyx_t_7 = __pyx_t_6;
    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
      __pyx_v_n = __pyx_t_8;
+4830:                 l[m] += beta[m]*CM[m,n]*(Ia[n]+a[n]+fsa[n]*Is[n])/fi[n]
      __pyx_t_9 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_11 = __pyx_v_n;
      __pyx_t_12 = __pyx_v_n;
      __pyx_t_13 = __pyx_v_n;
      __pyx_t_14 = __pyx_v_n;
      __pyx_t_15 = __pyx_v_n;
      __pyx_t_16 = __pyx_v_n;
      __pyx_t_17 = __pyx_v_m;
      *((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_17 * __pyx_v_l.strides[0]) )) += ((((*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_9 * __pyx_v_beta.strides[0]) ))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_10 * __pyx_v_CM.strides[0]) ) + __pyx_t_11 * __pyx_v_CM.strides[1]) )))) * (((*((double *) ( /* dim=0 */ (__pyx_v_Ia.data + __pyx_t_12 * __pyx_v_Ia.strides[0]) ))) + (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_13 * __pyx_v_a.strides[0]) )))) + ((*((double *) ( /* dim=0 */ (__pyx_v_fsa.data + __pyx_t_14 * __pyx_v_fsa.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_15 * __pyx_v_Is.strides[0]) )))))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_16 * __pyx_v_fi.strides[0]) ))));
    }
  }
 4831: 
+4832:     cdef jacobian(self, double [:] s, double [:] e, double [:] a, double [:] Ia, double [:] Is, double [:] q, double [:] l, double [:] TR):
static PyObject *__pyx_f_6pyross_9inference_14SEAIRQ_testing_jacobian(struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *__pyx_v_self, __Pyx_memviewslice __pyx_v_s, __Pyx_memviewslice __pyx_v_e, __Pyx_memviewslice __pyx_v_a, __Pyx_memviewslice __pyx_v_Ia, __Pyx_memviewslice __pyx_v_Is, __Pyx_memviewslice __pyx_v_q, __Pyx_memviewslice __pyx_v_l, __Pyx_memviewslice __pyx_v_TR) {
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_n;
  Py_ssize_t __pyx_v_M;
  Py_ssize_t __pyx_v_dim;
  double __pyx_v_Omega;
  __Pyx_memviewslice __pyx_v_gE = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gA = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gIa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gIs = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fsa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ars = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_kapE = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_beta = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_t0;
  double __pyx_v_tE;
  double __pyx_v_tA;
  double __pyx_v_tIa;
  double __pyx_v_tIs;
  __Pyx_memviewslice __pyx_v_alpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_balpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fi = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_J = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_CM = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("jacobian", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_AddTraceback("pyross.inference.SEAIRQ_testing.jacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_gE, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gA, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIs, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fsa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ars, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_kapE, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_beta, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_alpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_balpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fi, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_J, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_CM, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4833:         cdef:
+4834:             Py_ssize_t m, n, M=self.M, dim=self.dim
  __pyx_t_1 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_1;
  __pyx_t_1 = __pyx_v_self->__pyx_base.dim;
  __pyx_v_dim = __pyx_t_1;
+4835:             double Omega = self.Omega
  __pyx_t_2 = __pyx_v_self->__pyx_base.Omega;
  __pyx_v_Omega = __pyx_t_2;
+4836:             double [:] gE=self.gE, gA=self.gA, gIa=self.gIa, gIs=self.gIs, fsa=self.fsa
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->gE), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4836, __pyx_L1_error)
  __pyx_v_gE = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->gA), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4836, __pyx_L1_error)
  __pyx_v_gA = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4836, __pyx_L1_error)
  __pyx_v_gIa = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIs), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4836, __pyx_L1_error)
  __pyx_v_gIs = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fsa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4836, __pyx_L1_error)
  __pyx_v_fsa = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
+4837:             double [:] ars=self.ars, kapE=self.kapE, beta=self.beta
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->ars), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4837, __pyx_L1_error)
  __pyx_v_ars = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->kapE), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4837, __pyx_L1_error)
  __pyx_v_kapE = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.beta), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4837, __pyx_L1_error)
  __pyx_v_beta = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
 4838:             double t0, tE, tA, tIa, tIs
+4839:             double [:] alpha=self.alpha, balpha=1-self.alpha, fi=self.fi
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.alpha), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4839, __pyx_L1_error)
  __pyx_v_alpha = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __pyx_t_4 = PyNumber_Subtract(__pyx_int_1, ((PyObject *)__pyx_v_self->__pyx_base.alpha)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4839, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4839, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_balpha = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fi), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4839, __pyx_L1_error)
  __pyx_v_fi = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
+4840:             double [:, :, :, :] J = self.J
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(((PyObject *)__pyx_v_self->__pyx_base.J), PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 4840, __pyx_L1_error)
  __pyx_v_J = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+4841:             double [:, :] CM=self.CM
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(((PyObject *)__pyx_v_self->__pyx_base.CM), PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 4841, __pyx_L1_error)
  __pyx_v_CM = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+4842:         for m in range(M):
  __pyx_t_1 = __pyx_v_M;
  __pyx_t_7 = __pyx_t_1;
  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
    __pyx_v_m = __pyx_t_8;
+4843:             t0 = 1./(ars[m]*(self.fi[m]-q[m]-Is[m])+Is[m])
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_4 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_ars.data + __pyx_t_9 * __pyx_v_ars.strides[0]) )))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4843, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_10 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->__pyx_base.fi), __pyx_v_m, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4843, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_11 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_q.data + __pyx_t_9 * __pyx_v_q.strides[0]) )))); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4843, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_12 = PyNumber_Subtract(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4843, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_11 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_9 * __pyx_v_Is.strides[0]) )))); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4843, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_10 = PyNumber_Subtract(__pyx_t_12, __pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4843, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = PyNumber_Multiply(__pyx_t_4, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4843, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_10 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_9 * __pyx_v_Is.strides[0]) )))); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4843, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_4 = PyNumber_Add(__pyx_t_11, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4843, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = __Pyx_PyFloat_TrueDivideCObj(__pyx_float_1_, __pyx_t_4, 1., 0, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4843, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_10); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4843, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_v_t0 = __pyx_t_2;
+4844:             tE = TR[m]*ars[m]*kapE[m]*t0/Omega
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_14 = __pyx_v_m;
    __pyx_v_tE = (((((*((double *) ( /* dim=0 */ (__pyx_v_TR.data + __pyx_t_9 * __pyx_v_TR.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_ars.data + __pyx_t_13 * __pyx_v_ars.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_kapE.data + __pyx_t_14 * __pyx_v_kapE.strides[0]) )))) * __pyx_v_t0) / __pyx_v_Omega);
+4845:             tA= TR[m]*ars[m]*t0/Omega
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_13 = __pyx_v_m;
    __pyx_v_tA = ((((*((double *) ( /* dim=0 */ (__pyx_v_TR.data + __pyx_t_14 * __pyx_v_TR.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_ars.data + __pyx_t_13 * __pyx_v_ars.strides[0]) )))) * __pyx_v_t0) / __pyx_v_Omega);
+4846:             tIa = TR[m]*ars[m]*t0/Omega
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_14 = __pyx_v_m;
    __pyx_v_tIa = ((((*((double *) ( /* dim=0 */ (__pyx_v_TR.data + __pyx_t_13 * __pyx_v_TR.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_ars.data + __pyx_t_14 * __pyx_v_ars.strides[0]) )))) * __pyx_v_t0) / __pyx_v_Omega);
+4847:             tIs = TR[m]*t0/Omega
    __pyx_t_14 = __pyx_v_m;
    __pyx_v_tIs = (((*((double *) ( /* dim=0 */ (__pyx_v_TR.data + __pyx_t_14 * __pyx_v_TR.strides[0]) ))) * __pyx_v_t0) / __pyx_v_Omega);
 4848: 
+4849:             for n in range(M):
    __pyx_t_15 = __pyx_v_M;
    __pyx_t_16 = __pyx_t_15;
    for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
      __pyx_v_n = __pyx_t_17;
+4850:                 J[0, m, 2, n] = -s[m]*beta[m]*CM[m, n]/fi[n]
      __pyx_t_14 = __pyx_v_m;
      __pyx_t_13 = __pyx_v_m;
      __pyx_t_9 = __pyx_v_m;
      __pyx_t_18 = __pyx_v_n;
      __pyx_t_19 = __pyx_v_n;
      __pyx_t_20 = 0;
      __pyx_t_21 = __pyx_v_m;
      __pyx_t_22 = 2;
      __pyx_t_23 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_20 * __pyx_v_J.strides[0]) ) + __pyx_t_21 * __pyx_v_J.strides[1]) ) + __pyx_t_22 * __pyx_v_J.strides[2]) ) + __pyx_t_23 * __pyx_v_J.strides[3]) )) = ((((-(*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_14 * __pyx_v_s.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_13 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_9 * __pyx_v_CM.strides[0]) ) + __pyx_t_18 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_19 * __pyx_v_fi.strides[0]) ))));
+4851:                 J[0, m, 3, n] = -s[m]*beta[m]*CM[m, n]/fi[n]
      __pyx_t_19 = __pyx_v_m;
      __pyx_t_18 = __pyx_v_m;
      __pyx_t_9 = __pyx_v_m;
      __pyx_t_13 = __pyx_v_n;
      __pyx_t_14 = __pyx_v_n;
      __pyx_t_23 = 0;
      __pyx_t_22 = __pyx_v_m;
      __pyx_t_21 = 3;
      __pyx_t_20 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_23 * __pyx_v_J.strides[0]) ) + __pyx_t_22 * __pyx_v_J.strides[1]) ) + __pyx_t_21 * __pyx_v_J.strides[2]) ) + __pyx_t_20 * __pyx_v_J.strides[3]) )) = ((((-(*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_19 * __pyx_v_s.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_18 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_9 * __pyx_v_CM.strides[0]) ) + __pyx_t_13 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_14 * __pyx_v_fi.strides[0]) ))));
+4852:                 J[0, m, 4, n] = -s[m]*beta[m]*CM[m, n]*fsa[n]/fi[n]
      __pyx_t_14 = __pyx_v_m;
      __pyx_t_13 = __pyx_v_m;
      __pyx_t_9 = __pyx_v_m;
      __pyx_t_18 = __pyx_v_n;
      __pyx_t_19 = __pyx_v_n;
      __pyx_t_20 = __pyx_v_n;
      __pyx_t_21 = 0;
      __pyx_t_22 = __pyx_v_m;
      __pyx_t_23 = 4;
      __pyx_t_24 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_21 * __pyx_v_J.strides[0]) ) + __pyx_t_22 * __pyx_v_J.strides[1]) ) + __pyx_t_23 * __pyx_v_J.strides[2]) ) + __pyx_t_24 * __pyx_v_J.strides[3]) )) = (((((-(*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_14 * __pyx_v_s.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_13 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_9 * __pyx_v_CM.strides[0]) ) + __pyx_t_18 * __pyx_v_CM.strides[1]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_fsa.data + __pyx_t_19 * __pyx_v_fsa.strides[0]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_20 * __pyx_v_fi.strides[0]) ))));
+4853:                 J[1, m, 2, n] = s[m]*beta[m]*CM[m, n]/fi[n]
      __pyx_t_20 = __pyx_v_m;
      __pyx_t_19 = __pyx_v_m;
      __pyx_t_18 = __pyx_v_m;
      __pyx_t_9 = __pyx_v_n;
      __pyx_t_13 = __pyx_v_n;
      __pyx_t_14 = 1;
      __pyx_t_24 = __pyx_v_m;
      __pyx_t_23 = 2;
      __pyx_t_22 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_14 * __pyx_v_J.strides[0]) ) + __pyx_t_24 * __pyx_v_J.strides[1]) ) + __pyx_t_23 * __pyx_v_J.strides[2]) ) + __pyx_t_22 * __pyx_v_J.strides[3]) )) = ((((*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_20 * __pyx_v_s.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_19 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_18 * __pyx_v_CM.strides[0]) ) + __pyx_t_9 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_13 * __pyx_v_fi.strides[0]) ))));
+4854:                 J[1, m, 3, n] = s[m]*beta[m]*CM[m, n]/fi[n]
      __pyx_t_13 = __pyx_v_m;
      __pyx_t_9 = __pyx_v_m;
      __pyx_t_18 = __pyx_v_m;
      __pyx_t_19 = __pyx_v_n;
      __pyx_t_20 = __pyx_v_n;
      __pyx_t_22 = 1;
      __pyx_t_23 = __pyx_v_m;
      __pyx_t_24 = 3;
      __pyx_t_14 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_22 * __pyx_v_J.strides[0]) ) + __pyx_t_23 * __pyx_v_J.strides[1]) ) + __pyx_t_24 * __pyx_v_J.strides[2]) ) + __pyx_t_14 * __pyx_v_J.strides[3]) )) = ((((*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_13 * __pyx_v_s.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_9 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_18 * __pyx_v_CM.strides[0]) ) + __pyx_t_19 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_20 * __pyx_v_fi.strides[0]) ))));
+4855:                 J[1, m, 4, n] = s[m]*beta[m]*CM[m, n]*fsa[n]/fi[n]
      __pyx_t_20 = __pyx_v_m;
      __pyx_t_19 = __pyx_v_m;
      __pyx_t_18 = __pyx_v_m;
      __pyx_t_9 = __pyx_v_n;
      __pyx_t_13 = __pyx_v_n;
      __pyx_t_14 = __pyx_v_n;
      __pyx_t_24 = 1;
      __pyx_t_23 = __pyx_v_m;
      __pyx_t_22 = 4;
      __pyx_t_21 = __pyx_v_n;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_24 * __pyx_v_J.strides[0]) ) + __pyx_t_23 * __pyx_v_J.strides[1]) ) + __pyx_t_22 * __pyx_v_J.strides[2]) ) + __pyx_t_21 * __pyx_v_J.strides[3]) )) = (((((*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_20 * __pyx_v_s.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_beta.data + __pyx_t_19 * __pyx_v_beta.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_18 * __pyx_v_CM.strides[0]) ) + __pyx_t_9 * __pyx_v_CM.strides[1]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_fsa.data + __pyx_t_13 * __pyx_v_fsa.strides[0]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_14 * __pyx_v_fi.strides[0]) ))));
    }
+4856:             J[0, m, 0, m] = -l[m]
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_13 = 0;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_18 = 0;
    __pyx_t_19 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_13 * __pyx_v_J.strides[0]) ) + __pyx_t_9 * __pyx_v_J.strides[1]) ) + __pyx_t_18 * __pyx_v_J.strides[2]) ) + __pyx_t_19 * __pyx_v_J.strides[3]) )) = (-(*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_14 * __pyx_v_l.strides[0]) ))));
+4857:             J[1, m, 0, m] = l[m]
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_19 = 1;
    __pyx_t_18 = __pyx_v_m;
    __pyx_t_9 = 0;
    __pyx_t_13 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_19 * __pyx_v_J.strides[0]) ) + __pyx_t_18 * __pyx_v_J.strides[1]) ) + __pyx_t_9 * __pyx_v_J.strides[2]) ) + __pyx_t_13 * __pyx_v_J.strides[3]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_14 * __pyx_v_l.strides[0]) )));
+4858:             J[1, m, 1, m] = - gE[m] - tE
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_13 = 1;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_18 = 1;
    __pyx_t_19 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_13 * __pyx_v_J.strides[0]) ) + __pyx_t_9 * __pyx_v_J.strides[1]) ) + __pyx_t_18 * __pyx_v_J.strides[2]) ) + __pyx_t_19 * __pyx_v_J.strides[3]) )) = ((-(*((double *) ( /* dim=0 */ (__pyx_v_gE.data + __pyx_t_14 * __pyx_v_gE.strides[0]) )))) - __pyx_v_tE);
+4859:             J[1, m, 4, m] += (1-ars[m])*tE*t0*e[m]
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_19 = __pyx_v_m;
    __pyx_t_18 = 1;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_13 = 4;
    __pyx_t_20 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_18 * __pyx_v_J.strides[0]) ) + __pyx_t_9 * __pyx_v_J.strides[1]) ) + __pyx_t_13 * __pyx_v_J.strides[2]) ) + __pyx_t_20 * __pyx_v_J.strides[3]) )) += ((((1.0 - (*((double *) ( /* dim=0 */ (__pyx_v_ars.data + __pyx_t_14 * __pyx_v_ars.strides[0]) )))) * __pyx_v_tE) * __pyx_v_t0) * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_19 * __pyx_v_e.strides[0]) ))));
+4860:             J[1, m, 5, m] = -ars[m]*tE*t0*e[m]
    __pyx_t_19 = __pyx_v_m;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_20 = 1;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_9 = 5;
    __pyx_t_18 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_20 * __pyx_v_J.strides[0]) ) + __pyx_t_13 * __pyx_v_J.strides[1]) ) + __pyx_t_9 * __pyx_v_J.strides[2]) ) + __pyx_t_18 * __pyx_v_J.strides[3]) )) = ((((-(*((double *) ( /* dim=0 */ (__pyx_v_ars.data + __pyx_t_19 * __pyx_v_ars.strides[0]) )))) * __pyx_v_tE) * __pyx_v_t0) * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_14 * __pyx_v_e.strides[0]) ))));
+4861:             J[2, m, 1, m] = gE[m]
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_19 = 2;
    __pyx_t_18 = __pyx_v_m;
    __pyx_t_9 = 1;
    __pyx_t_13 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_19 * __pyx_v_J.strides[0]) ) + __pyx_t_18 * __pyx_v_J.strides[1]) ) + __pyx_t_9 * __pyx_v_J.strides[2]) ) + __pyx_t_13 * __pyx_v_J.strides[3]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_gE.data + __pyx_t_14 * __pyx_v_gE.strides[0]) )));
+4862:             J[2, m, 2, m] = - gA[m] - tA
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_13 = 2;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_18 = 2;
    __pyx_t_19 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_13 * __pyx_v_J.strides[0]) ) + __pyx_t_9 * __pyx_v_J.strides[1]) ) + __pyx_t_18 * __pyx_v_J.strides[2]) ) + __pyx_t_19 * __pyx_v_J.strides[3]) )) = ((-(*((double *) ( /* dim=0 */ (__pyx_v_gA.data + __pyx_t_14 * __pyx_v_gA.strides[0]) )))) - __pyx_v_tA);
+4863:             J[2, m, 4, m] = (1-ars[m])*tA*t0*a[m]
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_19 = __pyx_v_m;
    __pyx_t_18 = 2;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_13 = 4;
    __pyx_t_20 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_18 * __pyx_v_J.strides[0]) ) + __pyx_t_9 * __pyx_v_J.strides[1]) ) + __pyx_t_13 * __pyx_v_J.strides[2]) ) + __pyx_t_20 * __pyx_v_J.strides[3]) )) = ((((1.0 - (*((double *) ( /* dim=0 */ (__pyx_v_ars.data + __pyx_t_14 * __pyx_v_ars.strides[0]) )))) * __pyx_v_tA) * __pyx_v_t0) * (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_19 * __pyx_v_a.strides[0]) ))));
+4864:             J[2, m, 5, m] = - ars[m]*tA*t0*a[m]
    __pyx_t_19 = __pyx_v_m;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_20 = 2;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_9 = 5;
    __pyx_t_18 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_20 * __pyx_v_J.strides[0]) ) + __pyx_t_13 * __pyx_v_J.strides[1]) ) + __pyx_t_9 * __pyx_v_J.strides[2]) ) + __pyx_t_18 * __pyx_v_J.strides[3]) )) = ((((-(*((double *) ( /* dim=0 */ (__pyx_v_ars.data + __pyx_t_19 * __pyx_v_ars.strides[0]) )))) * __pyx_v_tA) * __pyx_v_t0) * (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_14 * __pyx_v_a.strides[0]) ))));
+4865:             J[3, m, 2, m] = alpha[m]*gA[m]
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_19 = __pyx_v_m;
    __pyx_t_18 = 3;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_13 = 2;
    __pyx_t_20 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_18 * __pyx_v_J.strides[0]) ) + __pyx_t_9 * __pyx_v_J.strides[1]) ) + __pyx_t_13 * __pyx_v_J.strides[2]) ) + __pyx_t_20 * __pyx_v_J.strides[3]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_14 * __pyx_v_alpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_gA.data + __pyx_t_19 * __pyx_v_gA.strides[0]) ))));
+4866:             J[3, m, 3, m] = - gIa[m] - tIa
    __pyx_t_19 = __pyx_v_m;
    __pyx_t_14 = 3;
    __pyx_t_20 = __pyx_v_m;
    __pyx_t_13 = 3;
    __pyx_t_9 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_14 * __pyx_v_J.strides[0]) ) + __pyx_t_20 * __pyx_v_J.strides[1]) ) + __pyx_t_13 * __pyx_v_J.strides[2]) ) + __pyx_t_9 * __pyx_v_J.strides[3]) )) = ((-(*((double *) ( /* dim=0 */ (__pyx_v_gIa.data + __pyx_t_19 * __pyx_v_gIa.strides[0]) )))) - __pyx_v_tIa);
+4867:             J[3, m, 4, m] = (1-ars[m])*tIa*t0*Ia[m]
    __pyx_t_19 = __pyx_v_m;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_13 = 3;
    __pyx_t_20 = __pyx_v_m;
    __pyx_t_14 = 4;
    __pyx_t_18 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_13 * __pyx_v_J.strides[0]) ) + __pyx_t_20 * __pyx_v_J.strides[1]) ) + __pyx_t_14 * __pyx_v_J.strides[2]) ) + __pyx_t_18 * __pyx_v_J.strides[3]) )) = ((((1.0 - (*((double *) ( /* dim=0 */ (__pyx_v_ars.data + __pyx_t_19 * __pyx_v_ars.strides[0]) )))) * __pyx_v_tIa) * __pyx_v_t0) * (*((double *) ( /* dim=0 */ (__pyx_v_Ia.data + __pyx_t_9 * __pyx_v_Ia.strides[0]) ))));
+4868:             J[3, m, 5, m] = - ars[m]*tIa*t0*Ia[m]
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_19 = __pyx_v_m;
    __pyx_t_18 = 3;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_20 = 5;
    __pyx_t_13 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_18 * __pyx_v_J.strides[0]) ) + __pyx_t_14 * __pyx_v_J.strides[1]) ) + __pyx_t_20 * __pyx_v_J.strides[2]) ) + __pyx_t_13 * __pyx_v_J.strides[3]) )) = ((((-(*((double *) ( /* dim=0 */ (__pyx_v_ars.data + __pyx_t_9 * __pyx_v_ars.strides[0]) )))) * __pyx_v_tIa) * __pyx_v_t0) * (*((double *) ( /* dim=0 */ (__pyx_v_Ia.data + __pyx_t_19 * __pyx_v_Ia.strides[0]) ))));
+4869:             J[4, m, 2, m] = balpha[m]*gA[m]
    __pyx_t_19 = __pyx_v_m;
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_13 = 4;
    __pyx_t_20 = __pyx_v_m;
    __pyx_t_14 = 2;
    __pyx_t_18 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_13 * __pyx_v_J.strides[0]) ) + __pyx_t_20 * __pyx_v_J.strides[1]) ) + __pyx_t_14 * __pyx_v_J.strides[2]) ) + __pyx_t_18 * __pyx_v_J.strides[3]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_balpha.data + __pyx_t_19 * __pyx_v_balpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_gA.data + __pyx_t_9 * __pyx_v_gA.strides[0]) ))));
+4870:             J[4, m, 4, m] = - gIs[m] - tIs + (1-ars[m])*tIs*t0*Is[m]
    __pyx_t_9 = __pyx_v_m;
    __pyx_t_19 = __pyx_v_m;
    __pyx_t_18 = __pyx_v_m;
    __pyx_t_14 = 4;
    __pyx_t_20 = __pyx_v_m;
    __pyx_t_13 = 4;
    __pyx_t_21 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_14 * __pyx_v_J.strides[0]) ) + __pyx_t_20 * __pyx_v_J.strides[1]) ) + __pyx_t_13 * __pyx_v_J.strides[2]) ) + __pyx_t_21 * __pyx_v_J.strides[3]) )) = (((-(*((double *) ( /* dim=0 */ (__pyx_v_gIs.data + __pyx_t_9 * __pyx_v_gIs.strides[0]) )))) - __pyx_v_tIs) + ((((1.0 - (*((double *) ( /* dim=0 */ (__pyx_v_ars.data + __pyx_t_19 * __pyx_v_ars.strides[0]) )))) * __pyx_v_tIs) * __pyx_v_t0) * (*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_18 * __pyx_v_Is.strides[0]) )))));
+4871:             J[4, m, 5, m] = - ars[m]*tIs*t0*Is[m]
    __pyx_t_18 = __pyx_v_m;
    __pyx_t_19 = __pyx_v_m;
    __pyx_t_9 = 4;
    __pyx_t_21 = __pyx_v_m;
    __pyx_t_13 = 5;
    __pyx_t_20 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_9 * __pyx_v_J.strides[0]) ) + __pyx_t_21 * __pyx_v_J.strides[1]) ) + __pyx_t_13 * __pyx_v_J.strides[2]) ) + __pyx_t_20 * __pyx_v_J.strides[3]) )) = ((((-(*((double *) ( /* dim=0 */ (__pyx_v_ars.data + __pyx_t_18 * __pyx_v_ars.strides[0]) )))) * __pyx_v_tIs) * __pyx_v_t0) * (*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_19 * __pyx_v_Is.strides[0]) ))));
+4872:             J[5, m, 1, m] = tE
    __pyx_t_19 = 5;
    __pyx_t_18 = __pyx_v_m;
    __pyx_t_20 = 1;
    __pyx_t_13 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_19 * __pyx_v_J.strides[0]) ) + __pyx_t_18 * __pyx_v_J.strides[1]) ) + __pyx_t_20 * __pyx_v_J.strides[2]) ) + __pyx_t_13 * __pyx_v_J.strides[3]) )) = __pyx_v_tE;
+4873:             J[5, m, 2, m] = tA
    __pyx_t_13 = 5;
    __pyx_t_20 = __pyx_v_m;
    __pyx_t_18 = 2;
    __pyx_t_19 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_13 * __pyx_v_J.strides[0]) ) + __pyx_t_20 * __pyx_v_J.strides[1]) ) + __pyx_t_18 * __pyx_v_J.strides[2]) ) + __pyx_t_19 * __pyx_v_J.strides[3]) )) = __pyx_v_tA;
+4874:             J[5, m, 3, m] = tIa
    __pyx_t_19 = 5;
    __pyx_t_18 = __pyx_v_m;
    __pyx_t_20 = 3;
    __pyx_t_13 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_19 * __pyx_v_J.strides[0]) ) + __pyx_t_18 * __pyx_v_J.strides[1]) ) + __pyx_t_20 * __pyx_v_J.strides[2]) ) + __pyx_t_13 * __pyx_v_J.strides[3]) )) = __pyx_v_tIa;
+4875:             J[5, m, 4, m] = tIs - (1-ars[m])*t0*(tE*e[m]+tA*a[m]+tIa*Ia[m]+tIs*Is[m])
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_20 = __pyx_v_m;
    __pyx_t_18 = __pyx_v_m;
    __pyx_t_19 = __pyx_v_m;
    __pyx_t_21 = __pyx_v_m;
    __pyx_t_9 = 5;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_22 = 4;
    __pyx_t_23 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_9 * __pyx_v_J.strides[0]) ) + __pyx_t_14 * __pyx_v_J.strides[1]) ) + __pyx_t_22 * __pyx_v_J.strides[2]) ) + __pyx_t_23 * __pyx_v_J.strides[3]) )) = (__pyx_v_tIs - (((1.0 - (*((double *) ( /* dim=0 */ (__pyx_v_ars.data + __pyx_t_13 * __pyx_v_ars.strides[0]) )))) * __pyx_v_t0) * ((((__pyx_v_tE * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_20 * __pyx_v_e.strides[0]) )))) + (__pyx_v_tA * (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_18 * __pyx_v_a.strides[0]) ))))) + (__pyx_v_tIa * (*((double *) ( /* dim=0 */ (__pyx_v_Ia.data + __pyx_t_19 * __pyx_v_Ia.strides[0]) ))))) + (__pyx_v_tIs * (*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_21 * __pyx_v_Is.strides[0]) )))))));
+4876:             J[5, m, 5, m] = ars[m]*t0*(tE*e[m]+tA*a[m]+tIa*Ia[m]+tIs*Is[m])
    __pyx_t_21 = __pyx_v_m;
    __pyx_t_19 = __pyx_v_m;
    __pyx_t_18 = __pyx_v_m;
    __pyx_t_20 = __pyx_v_m;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_23 = 5;
    __pyx_t_22 = __pyx_v_m;
    __pyx_t_14 = 5;
    __pyx_t_9 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_23 * __pyx_v_J.strides[0]) ) + __pyx_t_22 * __pyx_v_J.strides[1]) ) + __pyx_t_14 * __pyx_v_J.strides[2]) ) + __pyx_t_9 * __pyx_v_J.strides[3]) )) = (((*((double *) ( /* dim=0 */ (__pyx_v_ars.data + __pyx_t_21 * __pyx_v_ars.strides[0]) ))) * __pyx_v_t0) * ((((__pyx_v_tE * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_19 * __pyx_v_e.strides[0]) )))) + (__pyx_v_tA * (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_18 * __pyx_v_a.strides[0]) ))))) + (__pyx_v_tIa * (*((double *) ( /* dim=0 */ (__pyx_v_Ia.data + __pyx_t_20 * __pyx_v_Ia.strides[0]) ))))) + (__pyx_v_tIs * (*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_13 * __pyx_v_Is.strides[0]) ))))));
  }
+4877:         self.J_mat = self.J.reshape((dim, dim))
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.J), __pyx_n_s_reshape); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_11 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_12 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_25 = PyTuple_New(2); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 4877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_GIVEREF(__pyx_t_11);
  PyTuple_SET_ITEM(__pyx_t_25, 0, __pyx_t_11);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_25, 1, __pyx_t_12);
  __pyx_t_11 = 0;
  __pyx_t_12 = 0;
  __pyx_t_12 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_10 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_12, __pyx_t_25) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_25);
  __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4877, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_10);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.J_mat);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.J_mat));
  __pyx_v_self->__pyx_base.J_mat = ((PyArrayObject *)__pyx_t_10);
  __pyx_t_10 = 0;
 4878: 
 4879: 
+4880:     cdef noise_correlation(self, double [:] s, double [:] e, double [:] a, double [:] Ia, double [:] Is, double [:] q, double [:] l, double [:] TR):
static PyObject *__pyx_f_6pyross_9inference_14SEAIRQ_testing_noise_correlation(struct __pyx_obj_6pyross_9inference_SEAIRQ_testing *__pyx_v_self, __Pyx_memviewslice __pyx_v_s, __Pyx_memviewslice __pyx_v_e, __Pyx_memviewslice __pyx_v_a, __Pyx_memviewslice __pyx_v_Ia, __Pyx_memviewslice __pyx_v_Is, __Pyx_memviewslice __pyx_v_q, __Pyx_memviewslice __pyx_v_l, __Pyx_memviewslice __pyx_v_TR) {
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_M;
  double __pyx_v_Omega;
  CYTHON_UNUSED __Pyx_memviewslice __pyx_v_beta = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gIa = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gIs = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gE = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_gA = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ars = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_kapE = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_tE;
  double __pyx_v_tA;
  double __pyx_v_tIa;
  double __pyx_v_tIs;
  __Pyx_memviewslice __pyx_v_alpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_balpha = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_B = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_t0 = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("noise_correlation", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_AddTraceback("pyross.inference.SEAIRQ_testing.noise_correlation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_beta, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIa, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gIs, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gE, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_gA, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ars, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_kapE, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_alpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_balpha, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_B, 1);
  __Pyx_XDECREF(__pyx_v_t0);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4881:         cdef:
+4882:             Py_ssize_t m, M=self.M
  __pyx_t_1 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_1;
+4883:             double Omega=self.Omega
  __pyx_t_2 = __pyx_v_self->__pyx_base.Omega;
  __pyx_v_Omega = __pyx_t_2;
+4884:             double [:] beta=self.beta, gIa=self.gIa, gIs=self.gIs, gE=self.gE, gA=self.gA
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.beta), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4884, __pyx_L1_error)
  __pyx_v_beta = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIa), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4884, __pyx_L1_error)
  __pyx_v_gIa = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.gIs), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4884, __pyx_L1_error)
  __pyx_v_gIs = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->gE), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4884, __pyx_L1_error)
  __pyx_v_gE = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->gA), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4884, __pyx_L1_error)
  __pyx_v_gA = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
+4885:             double [:] ars=self.ars, kapE=self.kapE
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->ars), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4885, __pyx_L1_error)
  __pyx_v_ars = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->kapE), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4885, __pyx_L1_error)
  __pyx_v_kapE = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
 4886:             double tE, tA, tIa, tIs
+4887:             double [:] alpha=self.alpha, balpha=1-self.alpha
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.alpha), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4887, __pyx_L1_error)
  __pyx_v_alpha = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __pyx_t_4 = PyNumber_Subtract(__pyx_int_1, ((PyObject *)__pyx_v_self->__pyx_base.alpha)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4887, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 4887, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_balpha = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
+4888:             double [:, :, :, :] B = self.B
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(((PyObject *)__pyx_v_self->__pyx_base.B), PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 4888, __pyx_L1_error)
  __pyx_v_B = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+4889:         for m in range(M): # only fill in the upper triangular form
  __pyx_t_1 = __pyx_v_M;
  __pyx_t_6 = __pyx_t_1;
  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
    __pyx_v_m = __pyx_t_7;
+4890:             t0 = 1./(ars[m]*(self.fi[m]-q[m]-Is[m])+Is[m])
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_4 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_ars.data + __pyx_t_8 * __pyx_v_ars.strides[0]) )))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4890, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_9 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->__pyx_base.fi), __pyx_v_m, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4890, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_10 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_q.data + __pyx_t_8 * __pyx_v_q.strides[0]) )))); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4890, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = PyNumber_Subtract(__pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4890, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_10 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_8 * __pyx_v_Is.strides[0]) )))); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4890, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_9 = PyNumber_Subtract(__pyx_t_11, __pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4890, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = PyNumber_Multiply(__pyx_t_4, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4890, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_9 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_8 * __pyx_v_Is.strides[0]) )))); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4890, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_4 = PyNumber_Add(__pyx_t_10, __pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4890, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyFloat_TrueDivideCObj(__pyx_float_1_, __pyx_t_4, 1., 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4890, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF_SET(__pyx_v_t0, __pyx_t_9);
    __pyx_t_9 = 0;
+4891:             tE = TR[m]*ars[m]*kapE[m]*t0/Omega
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_9 = PyFloat_FromDouble((((*((double *) ( /* dim=0 */ (__pyx_v_TR.data + __pyx_t_8 * __pyx_v_TR.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_ars.data + __pyx_t_12 * __pyx_v_ars.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_kapE.data + __pyx_t_13 * __pyx_v_kapE.strides[0]) ))))); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4891, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_4 = PyNumber_Multiply(__pyx_t_9, __pyx_v_t0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4891, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = PyFloat_FromDouble(__pyx_v_Omega); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4891, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4891, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_10); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4891, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_v_tE = __pyx_t_2;
+4892:             tA= TR[m]*ars[m]*t0/Omega
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_10 = PyFloat_FromDouble(((*((double *) ( /* dim=0 */ (__pyx_v_TR.data + __pyx_t_13 * __pyx_v_TR.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_ars.data + __pyx_t_12 * __pyx_v_ars.strides[0]) ))))); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4892, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_9 = PyNumber_Multiply(__pyx_t_10, __pyx_v_t0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4892, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = PyFloat_FromDouble(__pyx_v_Omega); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4892, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4892, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4892, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_tA = __pyx_t_2;
+4893:             tIa = TR[m]*ars[m]*t0/Omega
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_4 = PyFloat_FromDouble(((*((double *) ( /* dim=0 */ (__pyx_v_TR.data + __pyx_t_12 * __pyx_v_TR.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_ars.data + __pyx_t_13 * __pyx_v_ars.strides[0]) ))))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4893, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_10 = PyNumber_Multiply(__pyx_t_4, __pyx_v_t0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4893, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyFloat_FromDouble(__pyx_v_Omega); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4893, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_9 = __Pyx_PyNumber_Divide(__pyx_t_10, __pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4893, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_9); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4893, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_v_tIa = __pyx_t_2;
+4894:             tIs = TR[m]*t0/Omega
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_9 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_TR.data + __pyx_t_13 * __pyx_v_TR.strides[0]) )))); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4894, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_4 = PyNumber_Multiply(__pyx_t_9, __pyx_v_t0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4894, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = PyFloat_FromDouble(__pyx_v_Omega); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4894, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4894, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_10); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4894, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_v_tIs = __pyx_t_2;
 4895: 
+4896:             B[0, m, 0, m] = l[m]*s[m]
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_8 = 0;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_15 = 0;
    __pyx_t_16 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_8 * __pyx_v_B.strides[0]) ) + __pyx_t_14 * __pyx_v_B.strides[1]) ) + __pyx_t_15 * __pyx_v_B.strides[2]) ) + __pyx_t_16 * __pyx_v_B.strides[3]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_13 * __pyx_v_l.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_12 * __pyx_v_s.strides[0]) ))));
+4897:             B[0, m, 1, m] =  - l[m]*s[m]
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_16 = 0;
    __pyx_t_15 = __pyx_v_m;
    __pyx_t_14 = 1;
    __pyx_t_8 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_16 * __pyx_v_B.strides[0]) ) + __pyx_t_15 * __pyx_v_B.strides[1]) ) + __pyx_t_14 * __pyx_v_B.strides[2]) ) + __pyx_t_8 * __pyx_v_B.strides[3]) )) = ((-(*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_12 * __pyx_v_l.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_13 * __pyx_v_s.strides[0]) ))));
+4898:             B[1, m, 1, m] = l[m]*s[m] + (gE[m]+tE)*e[m]
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_15 = 1;
    __pyx_t_16 = __pyx_v_m;
    __pyx_t_17 = 1;
    __pyx_t_18 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_15 * __pyx_v_B.strides[0]) ) + __pyx_t_16 * __pyx_v_B.strides[1]) ) + __pyx_t_17 * __pyx_v_B.strides[2]) ) + __pyx_t_18 * __pyx_v_B.strides[3]) )) = (((*((double *) ( /* dim=0 */ (__pyx_v_l.data + __pyx_t_13 * __pyx_v_l.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_12 * __pyx_v_s.strides[0]) )))) + (((*((double *) ( /* dim=0 */ (__pyx_v_gE.data + __pyx_t_8 * __pyx_v_gE.strides[0]) ))) + __pyx_v_tE) * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_14 * __pyx_v_e.strides[0]) )))));
+4899:             B[1, m, 2, m] = -gE[m]*e[m]
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_12 = 1;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_18 = 2;
    __pyx_t_17 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_12 * __pyx_v_B.strides[0]) ) + __pyx_t_13 * __pyx_v_B.strides[1]) ) + __pyx_t_18 * __pyx_v_B.strides[2]) ) + __pyx_t_17 * __pyx_v_B.strides[3]) )) = ((-(*((double *) ( /* dim=0 */ (__pyx_v_gE.data + __pyx_t_14 * __pyx_v_gE.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_8 * __pyx_v_e.strides[0]) ))));
+4900:             B[2, m, 2, m] = gE[m]*e[m]+(gA[m]+tA)*a[m]
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_17 = __pyx_v_m;
    __pyx_t_18 = __pyx_v_m;
    __pyx_t_13 = 2;
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_16 = 2;
    __pyx_t_15 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_13 * __pyx_v_B.strides[0]) ) + __pyx_t_12 * __pyx_v_B.strides[1]) ) + __pyx_t_16 * __pyx_v_B.strides[2]) ) + __pyx_t_15 * __pyx_v_B.strides[3]) )) = (((*((double *) ( /* dim=0 */ (__pyx_v_gE.data + __pyx_t_8 * __pyx_v_gE.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_14 * __pyx_v_e.strides[0]) )))) + (((*((double *) ( /* dim=0 */ (__pyx_v_gA.data + __pyx_t_17 * __pyx_v_gA.strides[0]) ))) + __pyx_v_tA) * (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_18 * __pyx_v_a.strides[0]) )))));
+4901:             B[2, m, 3, m] = -alpha[m]*gA[m]*a[m]
    __pyx_t_18 = __pyx_v_m;
    __pyx_t_17 = __pyx_v_m;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_8 = 2;
    __pyx_t_15 = __pyx_v_m;
    __pyx_t_16 = 3;
    __pyx_t_12 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_8 * __pyx_v_B.strides[0]) ) + __pyx_t_15 * __pyx_v_B.strides[1]) ) + __pyx_t_16 * __pyx_v_B.strides[2]) ) + __pyx_t_12 * __pyx_v_B.strides[3]) )) = (((-(*((double *) ( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_18 * __pyx_v_alpha.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_gA.data + __pyx_t_17 * __pyx_v_gA.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_14 * __pyx_v_a.strides[0]) ))));
+4902:             B[2, m, 4, m] = -balpha[m]*gA[m]*a[m]
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_17 = __pyx_v_m;
    __pyx_t_18 = __pyx_v_m;
    __pyx_t_12 = 2;
    __pyx_t_16 = __pyx_v_m;
    __pyx_t_15 = 4;
    __pyx_t_8 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_12 * __pyx_v_B.strides[0]) ) + __pyx_t_16 * __pyx_v_B.strides[1]) ) + __pyx_t_15 * __pyx_v_B.strides[2]) ) + __pyx_t_8 * __pyx_v_B.strides[3]) )) = (((-(*((double *) ( /* dim=0 */ (__pyx_v_balpha.data + __pyx_t_14 * __pyx_v_balpha.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_gA.data + __pyx_t_17 * __pyx_v_gA.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_18 * __pyx_v_a.strides[0]) ))));
+4903:             B[3, m, 3, m] = alpha[m]*gA[m]*a[m]+(gIa[m]+tIa)*Ia[m]
    __pyx_t_18 = __pyx_v_m;
    __pyx_t_17 = __pyx_v_m;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_15 = __pyx_v_m;
    __pyx_t_16 = 3;
    __pyx_t_12 = __pyx_v_m;
    __pyx_t_13 = 3;
    __pyx_t_19 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_16 * __pyx_v_B.strides[0]) ) + __pyx_t_12 * __pyx_v_B.strides[1]) ) + __pyx_t_13 * __pyx_v_B.strides[2]) ) + __pyx_t_19 * __pyx_v_B.strides[3]) )) = ((((*((double *) ( /* dim=0 */ (__pyx_v_alpha.data + __pyx_t_18 * __pyx_v_alpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_gA.data + __pyx_t_17 * __pyx_v_gA.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_14 * __pyx_v_a.strides[0]) )))) + (((*((double *) ( /* dim=0 */ (__pyx_v_gIa.data + __pyx_t_8 * __pyx_v_gIa.strides[0]) ))) + __pyx_v_tIa) * (*((double *) ( /* dim=0 */ (__pyx_v_Ia.data + __pyx_t_15 * __pyx_v_Ia.strides[0]) )))));
+4904:             B[4, m, 4, m] = balpha[m]*gA[m]*a[m] + (gIs[m]+tIs)*Is[m]
    __pyx_t_15 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_17 = __pyx_v_m;
    __pyx_t_18 = __pyx_v_m;
    __pyx_t_19 = 4;
    __pyx_t_13 = __pyx_v_m;
    __pyx_t_12 = 4;
    __pyx_t_16 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_19 * __pyx_v_B.strides[0]) ) + __pyx_t_13 * __pyx_v_B.strides[1]) ) + __pyx_t_12 * __pyx_v_B.strides[2]) ) + __pyx_t_16 * __pyx_v_B.strides[3]) )) = ((((*((double *) ( /* dim=0 */ (__pyx_v_balpha.data + __pyx_t_15 * __pyx_v_balpha.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_gA.data + __pyx_t_8 * __pyx_v_gA.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_14 * __pyx_v_a.strides[0]) )))) + (((*((double *) ( /* dim=0 */ (__pyx_v_gIs.data + __pyx_t_17 * __pyx_v_gIs.strides[0]) ))) + __pyx_v_tIs) * (*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_18 * __pyx_v_Is.strides[0]) )))));
+4905:             B[1, m, 5, m] = -tE*e[m]
    __pyx_t_18 = __pyx_v_m;
    __pyx_t_17 = 1;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_8 = 5;
    __pyx_t_15 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_17 * __pyx_v_B.strides[0]) ) + __pyx_t_14 * __pyx_v_B.strides[1]) ) + __pyx_t_8 * __pyx_v_B.strides[2]) ) + __pyx_t_15 * __pyx_v_B.strides[3]) )) = ((-__pyx_v_tE) * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_18 * __pyx_v_e.strides[0]) ))));
+4906:             B[2, m, 5, m] = -tA*a[m]
    __pyx_t_18 = __pyx_v_m;
    __pyx_t_15 = 2;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_14 = 5;
    __pyx_t_17 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_15 * __pyx_v_B.strides[0]) ) + __pyx_t_8 * __pyx_v_B.strides[1]) ) + __pyx_t_14 * __pyx_v_B.strides[2]) ) + __pyx_t_17 * __pyx_v_B.strides[3]) )) = ((-__pyx_v_tA) * (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_18 * __pyx_v_a.strides[0]) ))));
+4907:             B[3, m, 5, m] = -tIa*Ia[m]
    __pyx_t_18 = __pyx_v_m;
    __pyx_t_17 = 3;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_8 = 5;
    __pyx_t_15 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_17 * __pyx_v_B.strides[0]) ) + __pyx_t_14 * __pyx_v_B.strides[1]) ) + __pyx_t_8 * __pyx_v_B.strides[2]) ) + __pyx_t_15 * __pyx_v_B.strides[3]) )) = ((-__pyx_v_tIa) * (*((double *) ( /* dim=0 */ (__pyx_v_Ia.data + __pyx_t_18 * __pyx_v_Ia.strides[0]) ))));
+4908:             B[4, m, 5, m] = -tIs*Is[m]
    __pyx_t_18 = __pyx_v_m;
    __pyx_t_15 = 4;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_14 = 5;
    __pyx_t_17 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_15 * __pyx_v_B.strides[0]) ) + __pyx_t_8 * __pyx_v_B.strides[1]) ) + __pyx_t_14 * __pyx_v_B.strides[2]) ) + __pyx_t_17 * __pyx_v_B.strides[3]) )) = ((-__pyx_v_tIs) * (*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_18 * __pyx_v_Is.strides[0]) ))));
+4909:             B[5, m, 5, m] = tE*e[m]+tA*a[m]+tIa*Ia[m]+tIs*Is[m]
    __pyx_t_18 = __pyx_v_m;
    __pyx_t_17 = __pyx_v_m;
    __pyx_t_14 = __pyx_v_m;
    __pyx_t_8 = __pyx_v_m;
    __pyx_t_15 = 5;
    __pyx_t_16 = __pyx_v_m;
    __pyx_t_12 = 5;
    __pyx_t_13 = __pyx_v_m;
    *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_15 * __pyx_v_B.strides[0]) ) + __pyx_t_16 * __pyx_v_B.strides[1]) ) + __pyx_t_12 * __pyx_v_B.strides[2]) ) + __pyx_t_13 * __pyx_v_B.strides[3]) )) = ((((__pyx_v_tE * (*((double *) ( /* dim=0 */ (__pyx_v_e.data + __pyx_t_18 * __pyx_v_e.strides[0]) )))) + (__pyx_v_tA * (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_17 * __pyx_v_a.strides[0]) ))))) + (__pyx_v_tIa * (*((double *) ( /* dim=0 */ (__pyx_v_Ia.data + __pyx_t_14 * __pyx_v_Ia.strides[0]) ))))) + (__pyx_v_tIs * (*((double *) ( /* dim=0 */ (__pyx_v_Is.data + __pyx_t_8 * __pyx_v_Is.strides[0]) )))));
  }
+4910:         self.B_vec = self.B.reshape((self.dim, self.dim))[(self.rows, self.cols)]
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.B), __pyx_n_s_reshape); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.dim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_11 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.dim); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_20 = PyTuple_New(2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 4910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_11);
  PyTuple_SET_ITEM(__pyx_t_20, 1, __pyx_t_11);
  __pyx_t_4 = 0;
  __pyx_t_11 = 0;
  __pyx_t_11 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_9);
    if (likely(__pyx_t_11)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_9, function);
    }
  }
  __pyx_t_10 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_11, __pyx_t_20) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_20);
  __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->__pyx_base.rows));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->__pyx_base.rows));
  PyTuple_SET_ITEM(__pyx_t_9, 0, ((PyObject *)__pyx_v_self->__pyx_base.rows));
  __Pyx_INCREF(((PyObject *)__pyx_v_self->__pyx_base.cols));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->__pyx_base.cols));
  PyTuple_SET_ITEM(__pyx_t_9, 1, ((PyObject *)__pyx_v_self->__pyx_base.cols));
  __pyx_t_20 = __Pyx_PyObject_GetItem(__pyx_t_10, __pyx_t_9); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 4910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (!(likely(((__pyx_t_20) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_20, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4910, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_20);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.B_vec);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.B_vec));
  __pyx_v_self->__pyx_base.B_vec = ((PyArrayObject *)__pyx_t_20);
  __pyx_t_20 = 0;
 4911: 
 4912: 
 4913: 
 4914: 
 4915: @cython.wraparound(False)
 4916: @cython.boundscheck(False)
 4917: @cython.cdivision(True)
 4918: @cython.nonecheck(False)
+4919: cdef class Model(SIR_type):
struct __pyx_obj_6pyross_9inference_Model {
  struct __pyx_obj_6pyross_9inference_SIR_type __pyx_base;
  PyArrayObject *constant_terms;
  PyArrayObject *linear_terms;
  PyArrayObject *infection_terms;
  PyArrayObject *finres_terms;
  PyArrayObject *resource_list;
  PyArrayObject *model_parameters;
  PyArrayObject *model_parameters_length;
  PyArrayObject *finres_pop;
  struct __pyx_obj_6pyross_13deterministic_Model *det_model;
  PyObject *model_spec;
  PyObject *param_dict;
  PyObject *model_param_keys;
  PyObject *parameter_mapping;
  PyObject *time_dep_param_mapping;
};
/* … */
struct __pyx_vtabstruct_6pyross_9inference_Model {
  struct __pyx_vtabstruct_6pyross_9inference_SIR_type __pyx_base;
  PyObject *(*fill_lambdas)(struct __pyx_obj_6pyross_9inference_Model *, __Pyx_memviewslice, __Pyx_memviewslice);
  PyObject *(*fill_finres_pop)(struct __pyx_obj_6pyross_9inference_Model *, __Pyx_memviewslice);
  PyObject *(*jacobian)(struct __pyx_obj_6pyross_9inference_Model *, __Pyx_memviewslice, __Pyx_memviewslice);
  PyObject *(*noise_correlation)(struct __pyx_obj_6pyross_9inference_Model *, __Pyx_memviewslice, __Pyx_memviewslice);
};
static struct __pyx_vtabstruct_6pyross_9inference_Model *__pyx_vtabptr_6pyross_9inference_Model;

 4920:     """
 4921:     Generic user-defined epidemic model.
 4922: 
 4923:     To initialise the Model,
 4924: 
 4925:     Parameters
 4926:     ----------
 4927:     model_spec: dict
 4928:         A dictionary specifying the model. See `Examples`.
 4929:     parameters: dict
 4930:         A dictionary containing the model parameters.
 4931:         All parameters can be float if not age-dependent, and np.array(M,) if age-dependent
 4932:     M: int
 4933:         Number of age groups.
 4934:     fi: np.array(M) or list
 4935:         Fraction of each age group.
 4936:     Omega: int
 4937:         Total population.
 4938:     steps: int, optional
 4939:         The number of internal integration steps performed between the observed points (not used in tangent space inference).
 4940:         For robustness, set steps to be large, lyapunov_method='LSODA'.
 4941:         For speed, set steps to be small (~4), lyapunov_method='euler'.
 4942:         For a combination of the two, choose something in between.
 4943:     det_method: str, optional
 4944:         The integration method used for deterministic integration.
 4945:         Choose one of 'LSODA' and 'RK45'. Default is 'LSODA'.
 4946:     lyapunov_method: str, optional
 4947:         The integration method used for the integration of the Lyapunov equation for the covariance.
 4948:         Choose one of 'LSODA', 'RK45', 'RK2', 'RK4' and 'euler'. Default is 'LSODA'.
 4949:     rtol_det: float, optional
 4950:         relative tolerance for the deterministic integrator (default 1e-3)
 4951:     rtol_lyapunov: float, optional
 4952:         relative tolerance for the Lyapunov-type integrator (default 1e-3)
 4953:     max_steps_det: int, optional
 4954:         Maximum number of integration steps (total) for the deterministic integrator. Default: unlimited (represented as 0)
 4955:         Parameters for which the integrator reaches max_steps_det are disregarded by the optimiser.
 4956:     max_steps_lyapunov: int, optional
 4957:         Maximum number of integration steps (total) for the Lyapunov-type integrator. Default: unlimited (represented as 0)
 4958:         Parameters for which the integrator reaches max_steps_lyapunov are disregarded by the optimiser.
 4959:     parameter_mapping: python function, optional
 4960:         A user-defined function that maps the dictionary the parameters used for inference to a dictionary of parameters used in model_spec. Default is an identical mapping.
 4961:     time_dep_param_mapping: python function, optional
 4962:         As parameter_mapping, but time-dependent. The user-defined function takes time as a second argument.
 4963: 
 4964:     See `SIR_type` for a table of all the methods
 4965: 
 4966:     Examples
 4967:     --------
 4968:     An example of model_spec and parameters for SIR class with a constant influx
 4969: 
 4970:     >>> model_spec = {
 4971:             "classes" : ["S", "I"],
 4972:             "S" : {
 4973:                 "constant"  : [ ["k"] ],
 4974:                 "infection" : [ ["I", "S", "-beta"] ]
 4975:             },
 4976:             "I" : {
 4977:                 "linear"    : [ ["I", "-gamma"] ],
 4978:                 "infection" : [ ["I", "S", "beta"] ]
 4979:             }
 4980:         }
 4981:     >>> parameters = {
 4982:             'beta': 0.1,
 4983:             'gamma': 0.1,
 4984:             'k': 1,
 4985:         }
 4986:     """
 4987: 
 4988:     cdef:
+4989:         readonly np.ndarray constant_terms, linear_terms, infection_terms, finres_terms, resource_list
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_14constant_terms_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_14constant_terms_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_14constant_terms___get__(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_14constant_terms___get__(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->constant_terms));
  __pyx_r = ((PyObject *)__pyx_v_self->constant_terms);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_12linear_terms_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_12linear_terms_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_12linear_terms___get__(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_12linear_terms___get__(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->linear_terms));
  __pyx_r = ((PyObject *)__pyx_v_self->linear_terms);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_15infection_terms_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_15infection_terms_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_15infection_terms___get__(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_15infection_terms___get__(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->infection_terms));
  __pyx_r = ((PyObject *)__pyx_v_self->infection_terms);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_12finres_terms_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_12finres_terms_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_12finres_terms___get__(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_12finres_terms___get__(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->finres_terms));
  __pyx_r = ((PyObject *)__pyx_v_self->finres_terms);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_13resource_list_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_13resource_list_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_13resource_list___get__(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_13resource_list___get__(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->resource_list));
  __pyx_r = ((PyObject *)__pyx_v_self->resource_list);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4990:         readonly np.ndarray model_parameters
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_16model_parameters_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_16model_parameters_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_16model_parameters___get__(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_16model_parameters___get__(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->model_parameters));
  __pyx_r = ((PyObject *)__pyx_v_self->model_parameters);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4991:         readonly np.ndarray model_parameters_length
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_23model_parameters_length_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_23model_parameters_length_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_23model_parameters_length___get__(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_23model_parameters_length___get__(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->model_parameters_length));
  __pyx_r = ((PyObject *)__pyx_v_self->model_parameters_length);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4992:         readonly np.ndarray finres_pop
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_10finres_pop_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_10finres_pop_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_10finres_pop___get__(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_10finres_pop___get__(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->finres_pop));
  __pyx_r = ((PyObject *)__pyx_v_self->finres_pop);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4993:         readonly pyross.deterministic.Model det_model
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_9det_model_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_9det_model_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_9det_model___get__(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_9det_model___get__(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->det_model));
  __pyx_r = ((PyObject *)__pyx_v_self->det_model);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4994:         readonly dict model_spec
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_10model_spec_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_10model_spec_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_10model_spec___get__(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_10model_spec___get__(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->model_spec);
  __pyx_r = __pyx_v_self->model_spec;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4995:         readonly dict param_dict
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_10param_dict_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_10param_dict_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_10param_dict___get__(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_10param_dict___get__(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->param_dict);
  __pyx_r = __pyx_v_self->param_dict;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4996:         readonly list model_param_keys
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_16model_param_keys_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_16model_param_keys_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_16model_param_keys___get__(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_16model_param_keys___get__(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->model_param_keys);
  __pyx_r = __pyx_v_self->model_param_keys;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4997:         readonly object parameter_mapping
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_17parameter_mapping_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_17parameter_mapping_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_17parameter_mapping___get__(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_17parameter_mapping___get__(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->parameter_mapping);
  __pyx_r = __pyx_v_self->parameter_mapping;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4998:         readonly object time_dep_param_mapping
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_22time_dep_param_mapping_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_22time_dep_param_mapping_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_22time_dep_param_mapping___get__(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_22time_dep_param_mapping___get__(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->time_dep_param_mapping);
  __pyx_r = __pyx_v_self->time_dep_param_mapping;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4999: 
 5000: 
 5001: 
+5002:     def __init__(self, model_spec, parameters, M, fi, Omega=1, steps=4,
/* Python wrapper */
static int __pyx_pw_6pyross_9inference_5Model_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6pyross_9inference_5Model_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_model_spec = 0;
  PyObject *__pyx_v_parameters = 0;
  PyObject *__pyx_v_M = 0;
  PyObject *__pyx_v_fi = 0;
  PyObject *__pyx_v_Omega = 0;
  PyObject *__pyx_v_steps = 0;
  PyObject *__pyx_v_det_method = 0;
  PyObject *__pyx_v_lyapunov_method = 0;
  PyObject *__pyx_v_rtol_det = 0;
  PyObject *__pyx_v_rtol_lyapunov = 0;
  PyObject *__pyx_v_max_steps_det = 0;
  PyObject *__pyx_v_max_steps_lyapunov = 0;
  PyObject *__pyx_v_parameter_mapping = 0;
  PyObject *__pyx_v_time_dep_param_mapping = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_model_spec,&__pyx_n_s_parameters,&__pyx_n_s_M,&__pyx_n_s_fi,&__pyx_n_s_Omega,&__pyx_n_s_steps,&__pyx_n_s_det_method,&__pyx_n_s_lyapunov_method,&__pyx_n_s_rtol_det,&__pyx_n_s_rtol_lyapunov,&__pyx_n_s_max_steps_det,&__pyx_n_s_max_steps_lyapunov,&__pyx_n_s_parameter_mapping,&__pyx_n_s_time_dep_param_mapping,0};
    PyObject* values[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[4] = ((PyObject *)__pyx_int_1);
    values[5] = ((PyObject *)__pyx_int_4);
    values[6] = ((PyObject *)__pyx_n_u_LSODA);
    values[7] = ((PyObject *)__pyx_n_u_LSODA);
    values[8] = ((PyObject *)__pyx_float_1eneg_3);
    values[9] = ((PyObject *)__pyx_float_1eneg_3);
    values[10] = ((PyObject *)__pyx_int_0);
    values[11] = ((PyObject *)__pyx_int_0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6pyross_9inference_5Model___init__(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self, PyObject *__pyx_v_model_spec, PyObject *__pyx_v_parameters, PyObject *__pyx_v_M, PyObject *__pyx_v_fi, PyObject *__pyx_v_Omega, PyObject *__pyx_v_steps, PyObject *__pyx_v_det_method, PyObject *__pyx_v_lyapunov_method, PyObject *__pyx_v_rtol_det, PyObject *__pyx_v_rtol_lyapunov, PyObject *__pyx_v_max_steps_det, PyObject *__pyx_v_max_steps_lyapunov, PyObject *__pyx_v_parameter_mapping, PyObject *__pyx_v_time_dep_param_mapping) {
  PyObject *__pyx_v_res = NULL;
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_v_ndx = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
  __Pyx_INCREF(__pyx_v_parameters);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pyross.inference.Model.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_res);
  __Pyx_XDECREF(__pyx_v_ndx);
  __Pyx_XDECREF(__pyx_v_parameters);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5003:                                     det_method='LSODA', lyapunov_method='LSODA', rtol_det=1e-3, rtol_lyapunov=1e-3, max_steps_det=0, max_steps_lyapunov=0,
+5004:                                     parameter_mapping=None, time_dep_param_mapping=None):
    values[12] = ((PyObject *)Py_None);
    values[13] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_model_spec)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_parameters)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 4, 14, 1); __PYX_ERR(0, 5002, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 4, 14, 2); __PYX_ERR(0, 5002, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fi)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 4, 14, 3); __PYX_ERR(0, 5002, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Omega);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_steps);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_det_method);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lyapunov_method);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol_det);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol_lyapunov);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps_det);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps_lyapunov);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_parameter_mapping);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_time_dep_param_mapping);
          if (value) { values[13] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 5002, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_model_spec = values[0];
    __pyx_v_parameters = values[1];
    __pyx_v_M = values[2];
    __pyx_v_fi = values[3];
    __pyx_v_Omega = values[4];
    __pyx_v_steps = values[5];
    __pyx_v_det_method = values[6];
    __pyx_v_lyapunov_method = values[7];
    __pyx_v_rtol_det = values[8];
    __pyx_v_rtol_lyapunov = values[9];
    __pyx_v_max_steps_det = values[10];
    __pyx_v_max_steps_lyapunov = values[11];
    __pyx_v_parameter_mapping = values[12];
    __pyx_v_time_dep_param_mapping = values[13];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 4, 14, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5002, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.Model.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_5Model___init__(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self), __pyx_v_model_spec, __pyx_v_parameters, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov, __pyx_v_parameter_mapping, __pyx_v_time_dep_param_mapping);
+5005:         if parameter_mapping is not None and time_dep_param_mapping is not None:
  __pyx_t_2 = (__pyx_v_parameter_mapping != Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_v_time_dep_param_mapping != Py_None);
  __pyx_t_2 = (__pyx_t_3 != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+5006:             raise Exception('Specify either parameter_mapping or time_dep_param_mapping')
    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__44, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5006, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(0, 5006, __pyx_L1_error)
/* … */
  __pyx_tuple__44 = PyTuple_Pack(1, __pyx_kp_u_Specify_either_parameter_mapping); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 5006, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__44);
  __Pyx_GIVEREF(__pyx_tuple__44);
+5007:         self.parameter_mapping = parameter_mapping
  __Pyx_INCREF(__pyx_v_parameter_mapping);
  __Pyx_GIVEREF(__pyx_v_parameter_mapping);
  __Pyx_GOTREF(__pyx_v_self->parameter_mapping);
  __Pyx_DECREF(__pyx_v_self->parameter_mapping);
  __pyx_v_self->parameter_mapping = __pyx_v_parameter_mapping;
+5008:         self.time_dep_param_mapping = time_dep_param_mapping
  __Pyx_INCREF(__pyx_v_time_dep_param_mapping);
  __Pyx_GIVEREF(__pyx_v_time_dep_param_mapping);
  __Pyx_GOTREF(__pyx_v_self->time_dep_param_mapping);
  __Pyx_DECREF(__pyx_v_self->time_dep_param_mapping);
  __pyx_v_self->time_dep_param_mapping = __pyx_v_time_dep_param_mapping;
+5009:         self.param_keys = list(parameters.keys())
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_parameters, __pyx_n_s_keys); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5009, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5009, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PySequence_List(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5009, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GIVEREF(__pyx_t_5);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.param_keys);
  __Pyx_DECREF(__pyx_v_self->__pyx_base.param_keys);
  __pyx_v_self->__pyx_base.param_keys = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
+5010:         if parameter_mapping is not None:
  __pyx_t_1 = (__pyx_v_parameter_mapping != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L6;
  }
+5011:             self.model_param_keys = list(parameter_mapping(parameters).keys())
    __Pyx_INCREF(__pyx_v_parameter_mapping);
    __pyx_t_6 = __pyx_v_parameter_mapping; __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_parameters);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5011, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_keys); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5011, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_5 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5011, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PySequence_List(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5011, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GIVEREF(__pyx_t_6);
    __Pyx_GOTREF(__pyx_v_self->model_param_keys);
    __Pyx_DECREF(__pyx_v_self->model_param_keys);
    __pyx_v_self->model_param_keys = ((PyObject*)__pyx_t_6);
    __pyx_t_6 = 0;
+5012:         elif time_dep_param_mapping is not None:
  __pyx_t_2 = (__pyx_v_time_dep_param_mapping != Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L6;
  }
+5013:             self.param_dict = parameters.copy()
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_parameters, __pyx_n_s_copy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5013, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5013, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (!(likely(PyDict_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(0, 5013, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_6);
    __Pyx_GOTREF(__pyx_v_self->param_dict);
    __Pyx_DECREF(__pyx_v_self->param_dict);
    __pyx_v_self->param_dict = ((PyObject*)__pyx_t_6);
    __pyx_t_6 = 0;
+5014:             self.model_param_keys = list(time_dep_param_mapping(parameters, 0).keys())
    __Pyx_INCREF(__pyx_v_time_dep_param_mapping);
    __pyx_t_4 = __pyx_v_time_dep_param_mapping; __pyx_t_7 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_parameters, __pyx_int_0};
      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5014, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_5);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_parameters, __pyx_int_0};
      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5014, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_5);
    } else
    #endif
    {
      __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5014, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (__pyx_t_7) {
        __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
      }
      __Pyx_INCREF(__pyx_v_parameters);
      __Pyx_GIVEREF(__pyx_v_parameters);
      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_v_parameters);
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_int_0);
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_9, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5014, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5014, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_6 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5014, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PySequence_List(__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5014, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GIVEREF(__pyx_t_4);
    __Pyx_GOTREF(__pyx_v_self->model_param_keys);
    __Pyx_DECREF(__pyx_v_self->model_param_keys);
    __pyx_v_self->model_param_keys = ((PyObject*)__pyx_t_4);
    __pyx_t_4 = 0;
 5015:         else:
+5016:             self.model_param_keys = self.param_keys.copy()
  /*else*/ {
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->__pyx_base.param_keys, __pyx_n_s_copy); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5016, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5016, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 5016, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_4);
    __Pyx_GOTREF(__pyx_v_self->model_param_keys);
    __Pyx_DECREF(__pyx_v_self->model_param_keys);
    __pyx_v_self->model_param_keys = ((PyObject*)__pyx_t_4);
    __pyx_t_4 = 0;
  }
  __pyx_L6:;
+5017:         self.model_spec=model_spec
  if (!(likely(PyDict_CheckExact(__pyx_v_model_spec))||((__pyx_v_model_spec) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_model_spec)->tp_name), 0))) __PYX_ERR(0, 5017, __pyx_L1_error)
  __pyx_t_4 = __pyx_v_model_spec;
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->model_spec);
  __Pyx_DECREF(__pyx_v_self->model_spec);
  __pyx_v_self->model_spec = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+5018:         res = pyross.utils.parse_model_spec(model_spec, self.model_param_keys)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyross); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5018, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_utils); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5018, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_parse_model_spec); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5018, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_model_spec, __pyx_v_self->model_param_keys};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5018, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_model_spec, __pyx_v_self->model_param_keys};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5018, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5018, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_v_model_spec);
    __Pyx_GIVEREF(__pyx_v_model_spec);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_v_model_spec);
    __Pyx_INCREF(__pyx_v_self->model_param_keys);
    __Pyx_GIVEREF(__pyx_v_self->model_param_keys);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_self->model_param_keys);
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5018, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_res = __pyx_t_4;
  __pyx_t_4 = 0;
+5019:         self.nClass = res[0]
  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_res, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 5019, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_self->__pyx_base.nClass = __pyx_t_10;
+5020:         self.class_index_dict = res[1]
  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_res, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5020, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (!(likely(PyDict_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 5020, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.class_index_dict);
  __Pyx_DECREF(__pyx_v_self->__pyx_base.class_index_dict);
  __pyx_v_self->__pyx_base.class_index_dict = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+5021:         self.constant_terms = res[2]
  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_res, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5021, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5021, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->constant_terms);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->constant_terms));
  __pyx_v_self->constant_terms = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
+5022:         self.linear_terms = res[3]
  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_res, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5022, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5022, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->linear_terms);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->linear_terms));
  __pyx_v_self->linear_terms = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
+5023:         self.infection_terms = res[4]
  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_res, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5023, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->infection_terms);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->infection_terms));
  __pyx_v_self->infection_terms = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
+5024:         self.finres_terms = res[5]
  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_res, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5024, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5024, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->finres_terms);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->finres_terms));
  __pyx_v_self->finres_terms = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
+5025:         self.resource_list = res[6]
  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_res, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5025, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5025, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->resource_list);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->resource_list));
  __pyx_v_self->resource_list = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
+5026:         super().__init__(parameters, self.nClass, M, fi, Omega, steps, det_method, lyapunov_method, rtol_det, rtol_lyapunov, max_steps_det, max_steps_lyapunov)
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5026, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6pyross_9inference_Model));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6pyross_9inference_Model));
  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_ptype_6pyross_9inference_Model));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_self));
  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_6, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5026, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_init); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5026, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.nClass); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5026, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_5 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[13] = {__pyx_t_5, __pyx_v_parameters, __pyx_t_9, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 12+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5026, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[13] = {__pyx_t_5, __pyx_v_parameters, __pyx_t_9, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 12+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5026, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(12+__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5026, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_v_parameters);
    __Pyx_GIVEREF(__pyx_v_parameters);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_8, __pyx_v_parameters);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_8, __pyx_t_9);
    __Pyx_INCREF(__pyx_v_M);
    __Pyx_GIVEREF(__pyx_v_M);
    PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_8, __pyx_v_M);
    __Pyx_INCREF(__pyx_v_fi);
    __Pyx_GIVEREF(__pyx_v_fi);
    PyTuple_SET_ITEM(__pyx_t_7, 3+__pyx_t_8, __pyx_v_fi);
    __Pyx_INCREF(__pyx_v_Omega);
    __Pyx_GIVEREF(__pyx_v_Omega);
    PyTuple_SET_ITEM(__pyx_t_7, 4+__pyx_t_8, __pyx_v_Omega);
    __Pyx_INCREF(__pyx_v_steps);
    __Pyx_GIVEREF(__pyx_v_steps);
    PyTuple_SET_ITEM(__pyx_t_7, 5+__pyx_t_8, __pyx_v_steps);
    __Pyx_INCREF(__pyx_v_det_method);
    __Pyx_GIVEREF(__pyx_v_det_method);
    PyTuple_SET_ITEM(__pyx_t_7, 6+__pyx_t_8, __pyx_v_det_method);
    __Pyx_INCREF(__pyx_v_lyapunov_method);
    __Pyx_GIVEREF(__pyx_v_lyapunov_method);
    PyTuple_SET_ITEM(__pyx_t_7, 7+__pyx_t_8, __pyx_v_lyapunov_method);
    __Pyx_INCREF(__pyx_v_rtol_det);
    __Pyx_GIVEREF(__pyx_v_rtol_det);
    PyTuple_SET_ITEM(__pyx_t_7, 8+__pyx_t_8, __pyx_v_rtol_det);
    __Pyx_INCREF(__pyx_v_rtol_lyapunov);
    __Pyx_GIVEREF(__pyx_v_rtol_lyapunov);
    PyTuple_SET_ITEM(__pyx_t_7, 9+__pyx_t_8, __pyx_v_rtol_lyapunov);
    __Pyx_INCREF(__pyx_v_max_steps_det);
    __Pyx_GIVEREF(__pyx_v_max_steps_det);
    PyTuple_SET_ITEM(__pyx_t_7, 10+__pyx_t_8, __pyx_v_max_steps_det);
    __Pyx_INCREF(__pyx_v_max_steps_lyapunov);
    __Pyx_GIVEREF(__pyx_v_max_steps_lyapunov);
    PyTuple_SET_ITEM(__pyx_t_7, 11+__pyx_t_8, __pyx_v_max_steps_lyapunov);
    __pyx_t_9 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5026, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+5027:         if self.parameter_mapping is not None:
  __pyx_t_1 = (__pyx_v_self->parameter_mapping != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
  }
+5028:             parameters = self.parameter_mapping(parameters)
    __Pyx_INCREF(__pyx_v_self->parameter_mapping);
    __pyx_t_6 = __pyx_v_self->parameter_mapping; __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_parameters);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5028, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF_SET(__pyx_v_parameters, __pyx_t_4);
    __pyx_t_4 = 0;
+5029:             self.param_mapping_enabled = True
    __pyx_v_self->__pyx_base.param_mapping_enabled = 1;
+5030:         if self.time_dep_param_mapping is not None:
  __pyx_t_2 = (__pyx_v_self->time_dep_param_mapping != Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L8;
  }
+5031:             self.det_model = pyross.deterministic.Model(model_spec, parameters, M, fi*Omega, time_dep_param_mapping=time_dep_param_mapping)
    __pyx_t_4 = PyNumber_Multiply(__pyx_v_fi, __pyx_v_Omega); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5031, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5031, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_v_model_spec);
    __Pyx_GIVEREF(__pyx_v_model_spec);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_model_spec);
    __Pyx_INCREF(__pyx_v_parameters);
    __Pyx_GIVEREF(__pyx_v_parameters);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_parameters);
    __Pyx_INCREF(__pyx_v_M);
    __Pyx_GIVEREF(__pyx_v_M);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_M);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5031, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_time_dep_param_mapping, __pyx_v_time_dep_param_mapping) < 0) __PYX_ERR(0, 5031, __pyx_L1_error)
    __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6pyross_13deterministic_Model), __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5031, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GIVEREF(__pyx_t_7);
    __Pyx_GOTREF(__pyx_v_self->det_model);
    __Pyx_DECREF(((PyObject *)__pyx_v_self->det_model));
    __pyx_v_self->det_model = ((struct __pyx_obj_6pyross_13deterministic_Model *)__pyx_t_7);
    __pyx_t_7 = 0;
+5032:             self.param_mapping_enabled = True
    __pyx_v_self->__pyx_base.param_mapping_enabled = 1;
 5033:         else:
+5034:             self.det_model = pyross.deterministic.Model(model_spec, parameters, M, fi*Omega)
  /*else*/ {
    __pyx_t_7 = PyNumber_Multiply(__pyx_v_fi, __pyx_v_Omega); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5034, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5034, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_model_spec);
    __Pyx_GIVEREF(__pyx_v_model_spec);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_model_spec);
    __Pyx_INCREF(__pyx_v_parameters);
    __Pyx_GIVEREF(__pyx_v_parameters);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_parameters);
    __Pyx_INCREF(__pyx_v_M);
    __Pyx_GIVEREF(__pyx_v_M);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_M);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6pyross_13deterministic_Model), __pyx_t_4, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5034, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GIVEREF(__pyx_t_7);
    __Pyx_GOTREF(__pyx_v_self->det_model);
    __Pyx_DECREF(((PyObject *)__pyx_v_self->det_model));
    __pyx_v_self->det_model = ((struct __pyx_obj_6pyross_13deterministic_Model *)__pyx_t_7);
    __pyx_t_7 = 0;
  }
  __pyx_L8:;
 5035: 
+5036:         self.finres_pop = np.empty( len(self.resource_list), dtype='object')  # populations for finite-resource transitions
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5036, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5036, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = ((PyObject *)__pyx_v_self->resource_list);
  __Pyx_INCREF(__pyx_t_7);
  __pyx_t_10 = PyObject_Length(__pyx_t_7); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5036, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5036, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5036, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);
  __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5036, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_n_u_object) < 0) __PYX_ERR(0, 5036, __pyx_L1_error)
  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5036, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5036, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_9);
  __Pyx_GOTREF(__pyx_v_self->finres_pop);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->finres_pop));
  __pyx_v_self->finres_pop = ((PyArrayObject *)__pyx_t_9);
  __pyx_t_9 = 0;
+5037:         for i in range(len(self.resource_list)):
  __pyx_t_9 = ((PyObject *)__pyx_v_self->resource_list);
  __Pyx_INCREF(__pyx_t_9);
  __pyx_t_10 = PyObject_Length(__pyx_t_9); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5037, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_11 = __pyx_t_10;
  for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
    __pyx_v_i = __pyx_t_12;
+5038:             ndx = self.resource_list[i][0]
    __pyx_t_9 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->resource_list), __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5038, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_9, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5038, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_XDECREF_SET(__pyx_v_ndx, __pyx_t_7);
    __pyx_t_7 = 0;
+5039:             if self.model_parameters_length[ndx] == 1:
    __pyx_t_7 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self->model_parameters_length), __pyx_v_ndx); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5039, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_9 = __Pyx_PyInt_EqObjC(__pyx_t_7, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5039, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 5039, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (__pyx_t_1) {
/* … */
      goto __pyx_L11;
    }
+5040:                 self.finres_pop[i] = 0
      if (unlikely(__Pyx_SetItemInt(((PyObject *)__pyx_v_self->finres_pop), __pyx_v_i, __pyx_int_0, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0)) __PYX_ERR(0, 5040, __pyx_L1_error)
 5041:             else:
+5042:                 self.finres_pop[i] = np.zeros(self.M, dtype=DTYPE)
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5042, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5042, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5042, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5042, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_9);
      __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5042, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5042, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 5042, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5042, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(__Pyx_SetItemInt(((PyObject *)__pyx_v_self->finres_pop), __pyx_v_i, __pyx_t_4, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0)) __PYX_ERR(0, 5042, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __pyx_L11:;
  }
 5043: 
+5044:     def infection_indices(self):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_3infection_indices(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_3infection_indices(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infection_indices (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_2infection_indices(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_2infection_indices(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self) {
  Py_ssize_t __pyx_v_a;
  PyObject *__pyx_v_indices = NULL;
  PyObject *__pyx_v_linear_terms_indices = NULL;
  PyObject *__pyx_v_term = NULL;
  PyObject *__pyx_v_infective_index = NULL;
  PyObject *__pyx_v_temp = NULL;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_product_index = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("infection_indices", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pyross.inference.Model.infection_indices", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_indices);
  __Pyx_XDECREF(__pyx_v_linear_terms_indices);
  __Pyx_XDECREF(__pyx_v_term);
  __Pyx_XDECREF(__pyx_v_infective_index);
  __Pyx_XDECREF(__pyx_v_temp);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_product_index);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+5045:         cdef Py_ssize_t a = 100
  __pyx_v_a = 0x64;
+5046:         indices = set()
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5046, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_indices = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+5047:         linear_terms_indices = list(range(self.linear_terms.shape[0]))
  __pyx_t_1 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_self->linear_terms->dimensions[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5047, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5047, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5047, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_linear_terms_indices = __pyx_t_1;
  __pyx_t_1 = 0;
 5048: 
 5049:         # Find all the infection terms
+5050:         for term in self.infection_terms:
  if (likely(PyList_CheckExact(((PyObject *)__pyx_v_self->infection_terms))) || PyTuple_CheckExact(((PyObject *)__pyx_v_self->infection_terms))) {
    __pyx_t_1 = ((PyObject *)__pyx_v_self->infection_terms); __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(((PyObject *)__pyx_v_self->infection_terms)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5050, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5050, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_4)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 5050, __pyx_L1_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5050, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      } else {
        if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 5050, __pyx_L1_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5050, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      }
    } else {
      __pyx_t_2 = __pyx_t_4(__pyx_t_1);
      if (unlikely(!__pyx_t_2)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 5050, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_XDECREF_SET(__pyx_v_term, __pyx_t_2);
    __pyx_t_2 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5051:             infective_index = term[1]
    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_term, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5051, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v_infective_index, __pyx_t_2);
    __pyx_t_2 = 0;
+5052:             indices.add(infective_index)
    __pyx_t_5 = PySet_Add(__pyx_v_indices, __pyx_v_infective_index); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 5052, __pyx_L1_error)
 5053: 
 5054:         # Find all the terms that turn into infection terms
+5055:         a = 100
  __pyx_v_a = 0x64;
+5056:         while a > 0:
  while (1) {
    __pyx_t_6 = ((__pyx_v_a > 0) != 0);
    if (!__pyx_t_6) break;
+5057:             a = 0
    __pyx_v_a = 0;
+5058:             temp = linear_terms_indices.copy()
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_linear_terms_indices, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5058, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5058, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF_SET(__pyx_v_temp, __pyx_t_1);
    __pyx_t_1 = 0;
+5059:             for i in linear_terms_indices:
    if (likely(PyList_CheckExact(__pyx_v_linear_terms_indices)) || PyTuple_CheckExact(__pyx_v_linear_terms_indices)) {
      __pyx_t_1 = __pyx_v_linear_terms_indices; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0;
      __pyx_t_4 = NULL;
    } else {
      __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_linear_terms_indices); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5059, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5059, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_4)) {
        if (likely(PyList_CheckExact(__pyx_t_1))) {
          if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 5059, __pyx_L1_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5059, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          #endif
        } else {
          if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 5059, __pyx_L1_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5059, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          #endif
        }
      } else {
        __pyx_t_2 = __pyx_t_4(__pyx_t_1);
        if (unlikely(!__pyx_t_2)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 5059, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_2);
      __pyx_t_2 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5060:                 product_index = self.linear_terms[i, 2]
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5060, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_v_i);
      __Pyx_GIVEREF(__pyx_v_i);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_i);
      __Pyx_INCREF(__pyx_int_2);
      __Pyx_GIVEREF(__pyx_int_2);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_2);
      __pyx_t_7 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self->linear_terms), __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5060, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF_SET(__pyx_v_product_index, __pyx_t_7);
      __pyx_t_7 = 0;
+5061:                 if product_index in indices:
      __pyx_t_6 = (__Pyx_PySet_ContainsTF(__pyx_v_product_index, __pyx_v_indices, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 5061, __pyx_L1_error)
      __pyx_t_8 = (__pyx_t_6 != 0);
      if (__pyx_t_8) {
/* … */
      }
+5062:                     a += 1
        __pyx_v_a = (__pyx_v_a + 1);
+5063:                     indices.add(self.linear_terms[i, 1])
        __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5063, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_INCREF(__pyx_v_i);
        __Pyx_GIVEREF(__pyx_v_i);
        PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_i);
        __Pyx_INCREF(__pyx_int_1);
        __Pyx_GIVEREF(__pyx_int_1);
        PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_int_1);
        __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self->linear_terms), __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5063, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_5 = PySet_Add(__pyx_v_indices, __pyx_t_2); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 5063, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+5064:                     temp.remove(i)
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_temp, __pyx_n_s_remove); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5064, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_9 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_9)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_9);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
          }
        }
        __pyx_t_2 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_9, __pyx_v_i) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_i);
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5064, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+5065:             linear_terms_indices = temp
    __Pyx_INCREF(__pyx_v_temp);
    __Pyx_DECREF_SET(__pyx_v_linear_terms_indices, __pyx_v_temp);
  }
+5066:         return list(indices)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PySequence_List(__pyx_v_indices); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5066, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 5067: 
+5068:     def set_params(self, parameters):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_5set_params(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_5set_params(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_params (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_4set_params(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self), ((PyObject *)__pyx_v_parameters));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_4set_params(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self, PyObject *__pyx_v_parameters) {
  Py_ssize_t __pyx_v_nParams;
  PyObject *__pyx_v_model_parameters = NULL;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_key = NULL;
  PyObject *__pyx_v_param = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_params", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("pyross.inference.Model.set_params", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_model_parameters);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_param);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+5069:         if self.det_model is not None:
  __pyx_t_1 = (((PyObject *)__pyx_v_self->det_model) != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
  }
+5070:             self.set_det_model(parameters)
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_det_model); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5070, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_parameters);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5070, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+5071:         nParams = len(self.param_keys)
  __pyx_t_3 = __pyx_v_self->__pyx_base.param_keys;
  __Pyx_INCREF(__pyx_t_3);
  if (unlikely(__pyx_t_3 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 5071, __pyx_L1_error)
  }
  __pyx_t_6 = PyList_GET_SIZE(__pyx_t_3); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5071, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_nParams = __pyx_t_6;
+5072:         self.param_dict = parameters.copy()
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_parameters, __pyx_n_s_copy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5072, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5072, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(PyDict_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 5072, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->param_dict);
  __Pyx_DECREF(__pyx_v_self->param_dict);
  __pyx_v_self->param_dict = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+5073:         if self.parameter_mapping is not None:
  __pyx_t_2 = (__pyx_v_self->parameter_mapping != Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+5074:             model_parameters = self.parameter_mapping(parameters)
    __Pyx_INCREF(__pyx_v_self->parameter_mapping);
    __pyx_t_4 = __pyx_v_self->parameter_mapping; __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_parameters);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5074, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_model_parameters = __pyx_t_3;
    __pyx_t_3 = 0;
+5075:             nParams = len(self.model_param_keys)
    __pyx_t_3 = __pyx_v_self->model_param_keys;
    __Pyx_INCREF(__pyx_t_3);
    if (unlikely(__pyx_t_3 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(0, 5075, __pyx_L1_error)
    }
    __pyx_t_6 = PyList_GET_SIZE(__pyx_t_3); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5075, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_nParams = __pyx_t_6;
+5076:             self.model_parameters = np.empty((nParams, self.M), dtype=DTYPE)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5076, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5076, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_nParams); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5076, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5076, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5076, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_5);
    __pyx_t_3 = 0;
    __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5076, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5076, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5076, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 5076, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5076, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5076, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_v_self->model_parameters);
    __Pyx_DECREF(((PyObject *)__pyx_v_self->model_parameters));
    __pyx_v_self->model_parameters = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
+5077:             self.model_parameters_length = np.empty(nParams, dtype=int)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5077, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5077, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_nParams); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5077, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5077, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5077, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 5077, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5077, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5077, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_4);
    __Pyx_GOTREF(__pyx_v_self->model_parameters_length);
    __Pyx_DECREF(((PyObject *)__pyx_v_self->model_parameters_length));
    __pyx_v_self->model_parameters_length = ((PyArrayObject *)__pyx_t_4);
    __pyx_t_4 = 0;
+5078:             try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      goto __pyx_L10_try_end;
      __pyx_L5_error:;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      goto __pyx_L1_error;
      __pyx_L10_try_end:;
    }
+5079:                 for (i, key) in enumerate(self.model_param_keys):
        __Pyx_INCREF(__pyx_int_0);
        __pyx_t_4 = __pyx_int_0;
        __pyx_t_3 = __pyx_v_self->model_param_keys; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
        for (;;) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 5079, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5079, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
          __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_5);
          __pyx_t_5 = 0;
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_4);
          __pyx_t_5 = __Pyx_PyInt_AddObjC(__pyx_t_4, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5079, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_4);
          __pyx_t_4 = __pyx_t_5;
          __pyx_t_5 = 0;
/* … */
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+5080:                     param = model_parameters[key]
          __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_model_parameters, __pyx_v_key); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5080, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_XDECREF_SET(__pyx_v_param, __pyx_t_5);
          __pyx_t_5 = 0;
+5081:                     self.model_parameters[i] = pyross.utils.age_dep_rates(param, self.M, key)
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_pyross); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5081, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_utils); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5081, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_age_dep_rates); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5081, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5081, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_12 = NULL;
          __pyx_t_13 = 0;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
            __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_7);
            if (likely(__pyx_t_12)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
              __Pyx_INCREF(__pyx_t_12);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_7, function);
              __pyx_t_13 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_7)) {
            PyObject *__pyx_temp[4] = {__pyx_t_12, __pyx_v_param, __pyx_t_11, __pyx_v_key};
            __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5081, __pyx_L5_error)
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
            PyObject *__pyx_temp[4] = {__pyx_t_12, __pyx_v_param, __pyx_t_11, __pyx_v_key};
            __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5081, __pyx_L5_error)
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          } else
          #endif
          {
            __pyx_t_14 = PyTuple_New(3+__pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5081, __pyx_L5_error)
            __Pyx_GOTREF(__pyx_t_14);
            if (__pyx_t_12) {
              __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_12); __pyx_t_12 = NULL;
            }
            __Pyx_INCREF(__pyx_v_param);
            __Pyx_GIVEREF(__pyx_v_param);
            PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_13, __pyx_v_param);
            __Pyx_GIVEREF(__pyx_t_11);
            PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_13, __pyx_t_11);
            __Pyx_INCREF(__pyx_v_key);
            __Pyx_GIVEREF(__pyx_v_key);
            PyTuple_SET_ITEM(__pyx_t_14, 2+__pyx_t_13, __pyx_v_key);
            __pyx_t_11 = 0;
            __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_14, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5081, __pyx_L5_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          }
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->model_parameters), __pyx_v_i, __pyx_t_5) < 0)) __PYX_ERR(0, 5081, __pyx_L5_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+5082:                     self.model_parameters_length[i] = np.size(param)
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5082, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_size); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5082, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
            __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_14);
            if (likely(__pyx_t_7)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
              __Pyx_INCREF(__pyx_t_7);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_14, function);
            }
          }
          __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_7, __pyx_v_param) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_v_param);
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5082, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->model_parameters_length), __pyx_v_i, __pyx_t_5) < 0)) __PYX_ERR(0, 5082, __pyx_L5_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+5083:             except KeyError:
      __pyx_t_13 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
      if (__pyx_t_13) {
        __Pyx_AddTraceback("pyross.inference.Model.set_params", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_3, &__pyx_t_5) < 0) __PYX_ERR(0, 5083, __pyx_L7_except_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_GOTREF(__pyx_t_5);
+5084:                 raise Exception('The parameters returned by parameter_mapping(...) do not contain certain keys. The keys are {}'.format(self.model_param_keys))
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_The_parameters_returned_by_param, __pyx_n_s_format); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5084, __pyx_L7_except_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_11 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_11)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
          }
        }
        __pyx_t_14 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_11, __pyx_v_self->model_param_keys) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_self->model_param_keys);
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5084, __pyx_L7_except_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyObject_CallOneArg(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5084, __pyx_L7_except_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_Raise(__pyx_t_7, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __PYX_ERR(0, 5084, __pyx_L7_except_error)
      }
      goto __pyx_L7_except_error;
      __pyx_L7_except_error:;
+5085:         elif self.time_dep_param_mapping is not None:
  __pyx_t_1 = (__pyx_v_self->time_dep_param_mapping != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L4;
  }
+5086:             self.set_time_dep_model_parameters(0)
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_time_dep_model_parameters); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5086, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_5 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_int_0);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5086, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 5087:         else:
+5088:             self.model_parameters = np.empty((nParams, self.M), dtype=DTYPE)
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_nParams); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4);
    __pyx_t_5 = 0;
    __pyx_t_4 = 0;
    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 5088, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5088, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_5);
    __Pyx_GOTREF(__pyx_v_self->model_parameters);
    __Pyx_DECREF(((PyObject *)__pyx_v_self->model_parameters));
    __pyx_v_self->model_parameters = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
+5089:             self.model_parameters_length = np.empty(nParams, dtype=int)
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5089, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5089, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_nParams); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5089, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5089, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5089, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 5089, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5089, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5089, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_v_self->model_parameters_length);
    __Pyx_DECREF(((PyObject *)__pyx_v_self->model_parameters_length));
    __pyx_v_self->model_parameters_length = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
+5090:             try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L20_try_end;
      __pyx_L15_error:;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8);
      goto __pyx_L1_error;
      __pyx_L20_try_end:;
    }
  }
  __pyx_L4:;
+5091:                 for (i, key) in enumerate(self.param_keys):
        __Pyx_INCREF(__pyx_int_0);
        __pyx_t_3 = __pyx_int_0;
        __pyx_t_5 = __pyx_v_self->__pyx_base.param_keys; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0;
        for (;;) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 5091, __pyx_L15_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5091, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
          __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_4);
          __pyx_t_4 = 0;
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3);
          __pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5091, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_3);
          __pyx_t_3 = __pyx_t_4;
          __pyx_t_4 = 0;
/* … */
        }
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+5092:                     param = parameters[key]
          __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_parameters, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5092, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_XDECREF_SET(__pyx_v_param, __pyx_t_4);
          __pyx_t_4 = 0;
+5093:                     self.model_parameters[i] = pyross.utils.age_dep_rates(param, self.M, key)
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_pyross); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5093, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_utils); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5093, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_age_dep_rates); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5093, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __pyx_t_14 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5093, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_11 = NULL;
          __pyx_t_13 = 0;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
            __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_7);
            if (likely(__pyx_t_11)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
              __Pyx_INCREF(__pyx_t_11);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_7, function);
              __pyx_t_13 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_7)) {
            PyObject *__pyx_temp[4] = {__pyx_t_11, __pyx_v_param, __pyx_t_14, __pyx_v_key};
            __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5093, __pyx_L15_error)
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
            PyObject *__pyx_temp[4] = {__pyx_t_11, __pyx_v_param, __pyx_t_14, __pyx_v_key};
            __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5093, __pyx_L15_error)
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          } else
          #endif
          {
            __pyx_t_12 = PyTuple_New(3+__pyx_t_13); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5093, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_12);
            if (__pyx_t_11) {
              __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11); __pyx_t_11 = NULL;
            }
            __Pyx_INCREF(__pyx_v_param);
            __Pyx_GIVEREF(__pyx_v_param);
            PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_13, __pyx_v_param);
            __Pyx_GIVEREF(__pyx_t_14);
            PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_13, __pyx_t_14);
            __Pyx_INCREF(__pyx_v_key);
            __Pyx_GIVEREF(__pyx_v_key);
            PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_13, __pyx_v_key);
            __pyx_t_14 = 0;
            __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_12, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5093, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          }
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->model_parameters), __pyx_v_i, __pyx_t_4) < 0)) __PYX_ERR(0, 5093, __pyx_L15_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+5094:                     self.model_parameters_length[i] = np.size(param)
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5094, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_size); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5094, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
            __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_12);
            if (likely(__pyx_t_7)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
              __Pyx_INCREF(__pyx_t_7);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_12, function);
            }
          }
          __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_7, __pyx_v_param) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_v_param);
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5094, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->model_parameters_length), __pyx_v_i, __pyx_t_4) < 0)) __PYX_ERR(0, 5094, __pyx_L15_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+5095:             except KeyError:
      __pyx_t_13 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
      if (__pyx_t_13) {
        __Pyx_AddTraceback("pyross.inference.Model.set_params", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_4) < 0) __PYX_ERR(0, 5095, __pyx_L17_except_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_GOTREF(__pyx_t_4);
+5096:                 raise Exception('The parameters passed do not contain certain keys. The keys are {}'.format(self.param_keys))
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_The_parameters_passed_do_not_con, __pyx_n_s_format); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5096, __pyx_L17_except_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_14 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_14)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_14);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
          }
        }
        __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_14, __pyx_v_self->__pyx_base.param_keys) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_self->__pyx_base.param_keys);
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5096, __pyx_L17_except_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyObject_CallOneArg(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_t_12); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5096, __pyx_L17_except_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_Raise(__pyx_t_7, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __PYX_ERR(0, 5096, __pyx_L17_except_error)
      }
      goto __pyx_L17_except_error;
      __pyx_L17_except_error:;
 5097: 
+5098:     def set_time_dep_model_parameters(self, tt):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_7set_time_dep_model_parameters(PyObject *__pyx_v_self, PyObject *__pyx_v_tt); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_7set_time_dep_model_parameters(PyObject *__pyx_v_self, PyObject *__pyx_v_tt) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_time_dep_model_parameters (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_6set_time_dep_model_parameters(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self), ((PyObject *)__pyx_v_tt));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_6set_time_dep_model_parameters(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self, PyObject *__pyx_v_tt) {
  PyObject *__pyx_v_model_parameters = NULL;
  Py_ssize_t __pyx_v_nParams;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_key = NULL;
  PyObject *__pyx_v_param = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_time_dep_model_parameters", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("pyross.inference.Model.set_time_dep_model_parameters", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_model_parameters);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_param);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+5099:         model_parameters = self.time_dep_param_mapping(self.param_dict, tt)
  __Pyx_INCREF(__pyx_v_self->time_dep_param_mapping);
  __pyx_t_2 = __pyx_v_self->time_dep_param_mapping; __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_self->param_dict, __pyx_v_tt};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5099, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_self->param_dict, __pyx_v_tt};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5099, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5099, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_self->param_dict);
    __Pyx_GIVEREF(__pyx_v_self->param_dict);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_self->param_dict);
    __Pyx_INCREF(__pyx_v_tt);
    __Pyx_GIVEREF(__pyx_v_tt);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_tt);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5099, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_model_parameters = __pyx_t_1;
  __pyx_t_1 = 0;
+5100:         nParams = len(self.model_param_keys)
  __pyx_t_1 = __pyx_v_self->model_param_keys;
  __Pyx_INCREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 5100, __pyx_L1_error)
  }
  __pyx_t_6 = PyList_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5100, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_nParams = __pyx_t_6;
+5101:         self.model_parameters = np.empty((nParams, self.M), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_nParams); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
  __pyx_t_1 = 0;
  __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 5101, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5101, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->model_parameters);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->model_parameters));
  __pyx_v_self->model_parameters = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+5102:         self.model_parameters_length = np.empty(nParams, dtype=int)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_nParams); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 5102, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5102, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_self->model_parameters_length);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->model_parameters_length));
  __pyx_v_self->model_parameters_length = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
 5103: 
+5104:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+5105:             for (i, key) in enumerate(self.model_param_keys):
      __Pyx_INCREF(__pyx_int_0);
      __pyx_t_2 = __pyx_int_0;
      __pyx_t_1 = __pyx_v_self->model_param_keys; __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0;
      for (;;) {
        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 5105, __pyx_L3_error)
        #else
        __pyx_t_5 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5105, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
        __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_5);
        __pyx_t_5 = 0;
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_2);
        __pyx_t_5 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5105, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_2);
        __pyx_t_2 = __pyx_t_5;
        __pyx_t_5 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+5106:                 param = model_parameters[key]
        __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_model_parameters, __pyx_v_key); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5106, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_XDECREF_SET(__pyx_v_param, __pyx_t_5);
        __pyx_t_5 = 0;
+5107:                 self.model_parameters[i] = pyross.utils.age_dep_rates(param, self.M, key)
        __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyross); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5107, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_utils); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5107, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_age_dep_rates); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5107, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5107, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11 = NULL;
        __pyx_t_4 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_11)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_4 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_3)) {
          PyObject *__pyx_temp[4] = {__pyx_t_11, __pyx_v_param, __pyx_t_10, __pyx_v_key};
          __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5107, __pyx_L3_error)
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
          PyObject *__pyx_temp[4] = {__pyx_t_11, __pyx_v_param, __pyx_t_10, __pyx_v_key};
          __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5107, __pyx_L3_error)
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        } else
        #endif
        {
          __pyx_t_12 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5107, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_12);
          if (__pyx_t_11) {
            __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11); __pyx_t_11 = NULL;
          }
          __Pyx_INCREF(__pyx_v_param);
          __Pyx_GIVEREF(__pyx_v_param);
          PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_4, __pyx_v_param);
          __Pyx_GIVEREF(__pyx_t_10);
          PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_4, __pyx_t_10);
          __Pyx_INCREF(__pyx_v_key);
          __Pyx_GIVEREF(__pyx_v_key);
          PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_4, __pyx_v_key);
          __pyx_t_10 = 0;
          __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_12, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5107, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->model_parameters), __pyx_v_i, __pyx_t_5) < 0)) __PYX_ERR(0, 5107, __pyx_L3_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+5108:                 self.model_parameters_length[i] = np.size(param)
        __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5108, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_size); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5108, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_12);
          if (likely(__pyx_t_3)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
            __Pyx_INCREF(__pyx_t_3);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_12, function);
          }
        }
        __pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_3, __pyx_v_param) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_v_param);
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5108, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->model_parameters_length), __pyx_v_i, __pyx_t_5) < 0)) __PYX_ERR(0, 5108, __pyx_L3_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+5109:         except KeyError:
    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
    if (__pyx_t_4) {
      __Pyx_AddTraceback("pyross.inference.Model.set_time_dep_model_parameters", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_5) < 0) __PYX_ERR(0, 5109, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_5);
+5110:             raise Exception('The parameters passed do not contain certain keys.\
      __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5110, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(0, 5110, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
+5111:                              The keys are {}'.format(self.param_keys))
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_The_parameters_passed_do_not_con_2, __pyx_n_s_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5111, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_12 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_10, __pyx_v_self->__pyx_base.param_keys) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_self->__pyx_base.param_keys);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5111, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 5112: 
+5113:     def set_det_model(self, parameters):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_9set_det_model(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_9set_det_model(PyObject *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_det_model (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_8set_det_model(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self), ((PyObject *)__pyx_v_parameters));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_8set_det_model(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self, PyObject *__pyx_v_parameters) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_det_model", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyross.inference.Model.set_det_model", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+5114:         if self.parameter_mapping is not None:
  __pyx_t_1 = (__pyx_v_self->parameter_mapping != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+5115:             self.det_model.update_model_parameters(self.parameter_mapping(parameters))
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->det_model), __pyx_n_s_update_model_parameters); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5115, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_self->parameter_mapping);
    __pyx_t_6 = __pyx_v_self->parameter_mapping; __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_parameters);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5115, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5115, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 5116:         else:
+5117:             self.det_model.update_model_parameters(parameters)
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->det_model), __pyx_n_s_update_model_parameters); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5117, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_parameters);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5117, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_L3:;
 5118: 
 5119: 
+5120:     def make_params_dict(self):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_5Model_11make_params_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_5Model_11make_params_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_params_dict (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_5Model_10make_params_dict(((struct __pyx_obj_6pyross_9inference_Model *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_5Model_10make_params_dict(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self) {
  PyObject *__pyx_v_param_dict = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("make_params_dict", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.Model.make_params_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_param_dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+5121:         param_dict = self.param_dict.copy()
  if (unlikely(__pyx_v_self->param_dict == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "copy");
    __PYX_ERR(0, 5121, __pyx_L1_error)
  }
  __pyx_t_1 = PyDict_Copy(__pyx_v_self->param_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5121, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_param_dict = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+5122:         return param_dict
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_param_dict);
  __pyx_r = __pyx_v_param_dict;
  goto __pyx_L0;
 5123: 
+5124:     cdef np.ndarray _get_r_from_x(self, np.ndarray x):
static PyArrayObject *__pyx_f_6pyross_9inference_5Model__get_r_from_x(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self, PyArrayObject *__pyx_v_x) {
  PyArrayObject *__pyx_v_r = 0;
  PyArrayObject *__pyx_v_xrs = 0;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_get_r_from_x", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyross.inference.Model._get_r_from_x", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_r);
  __Pyx_XDECREF((PyObject *)__pyx_v_xrs);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5125:         cdef:
 5126:             np.ndarray r
+5127:             np.ndarray xrs=x.reshape(int(self.dim/self.M), self.M)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_x), __pyx_n_s_reshape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5127, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyInt_FromSsize_t((__pyx_v_self->__pyx_base.dim / __pyx_v_self->__pyx_base.M)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5127, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyInt_Type)), __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5127, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5127, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_4, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5127, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_4, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5127, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5127, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_3);
    __pyx_t_4 = 0;
    __pyx_t_3 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5127, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5127, __pyx_L1_error)
  __pyx_v_xrs = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+5128:         if 'R' in self.class_index_dict.keys():
  if (unlikely(__pyx_v_self->__pyx_base.class_index_dict == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "keys");
    __PYX_ERR(0, 5128, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_Keys(__pyx_v_self->__pyx_base.class_index_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5128, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_R, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 5128, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_9 = (__pyx_t_8 != 0);
  if (__pyx_t_9) {
/* … */
    goto __pyx_L3;
  }
+5129:             r = xrs[self.class_index_dict['R'],:]
    if (unlikely(__pyx_v_self->__pyx_base.class_index_dict == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 5129, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_self->__pyx_base.class_index_dict, __pyx_n_u_R); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5129, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5129, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
    __Pyx_INCREF(__pyx_slice_);
    __Pyx_GIVEREF(__pyx_slice_);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_slice_);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_xrs), __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5129, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5129, __pyx_L1_error)
    __pyx_v_r = ((PyArrayObject *)__pyx_t_1);
    __pyx_t_1 = 0;
+5130:         elif self.constant_terms.size > 0:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->constant_terms), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5130, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 5130, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_9) {
/* … */
    goto __pyx_L3;
  }
+5131:             r = xrs[-1,:] - np.sum(xrs[:-1,:], axis=0)
    __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_xrs), __pyx_tuple__45); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sum); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple__45 = PyTuple_Pack(2, __pyx_int_neg_1, __pyx_slice_); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 5131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__45);
  __Pyx_GIVEREF(__pyx_tuple__45);
  __pyx_slice__46 = PySlice_New(Py_None, __pyx_int_neg_1, Py_None); if (unlikely(!__pyx_slice__46)) __PYX_ERR(0, 5131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__46);
  __Pyx_GIVEREF(__pyx_slice__46);
    __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_xrs), __pyx_tuple__47); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 5131, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Subtract(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5131, __pyx_L1_error)
    __pyx_v_r = ((PyArrayObject *)__pyx_t_1);
    __pyx_t_1 = 0;
  __pyx_tuple__47 = PyTuple_Pack(2, __pyx_slice__46, __pyx_slice_); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(0, 5131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__47);
  __Pyx_GIVEREF(__pyx_tuple__47);
 5132:         else:
+5133:             r = self.fi - np.sum(xrs, axis=0)
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sum); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)__pyx_v_xrs));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_xrs));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_xrs));
    __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 5133, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyNumber_Subtract(((PyObject *)__pyx_v_self->__pyx_base.fi), __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5133, __pyx_L1_error)
    __pyx_v_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
  }
  __pyx_L3:;
+5134:         return r
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_r));
  __pyx_r = __pyx_v_r;
  goto __pyx_L0;
 5135: 
+5136:     cdef compute_jacobian_and_b_matrix(self, double [:] x, double t,
static PyObject *__pyx_f_6pyross_9inference_5Model_compute_jacobian_and_b_matrix(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self, __Pyx_memviewslice __pyx_v_x, double __pyx_v_t, struct __pyx_opt_args_6pyross_9inference_5Model_compute_jacobian_and_b_matrix *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("pyross.inference.Model.compute_jacobian_and_b_matrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_l, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fi, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_6pyross_9inference_5Model_compute_jacobian_and_b_matrix {
  int __pyx_n;
  PyObject *b_matrix;
  PyObject *jacobian;
};
+5137:                                             b_matrix=True, jacobian=False):
  PyObject *__pyx_v_b_matrix = ((PyObject *)Py_True);
  PyObject *__pyx_v_jacobian = ((PyObject *)Py_False);
  Py_ssize_t __pyx_v_nClass;
  Py_ssize_t __pyx_v_M;
  Py_ssize_t __pyx_v_num_of_infection_terms;
  __Pyx_memviewslice __pyx_v_l = { 0, 0, { 0 }, { 0 }, { 0 } };
  CYTHON_UNUSED __Pyx_memviewslice __pyx_v_fi = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("compute_jacobian_and_b_matrix", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_b_matrix = __pyx_optional_args->b_matrix;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_jacobian = __pyx_optional_args->jacobian;
      }
    }
  }
 5138:         cdef:
+5139:             Py_ssize_t nClass=self.nClass, M=self.M
  __pyx_t_1 = __pyx_v_self->__pyx_base.nClass;
  __pyx_v_nClass = __pyx_t_1;
  __pyx_t_1 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_1;
+5140:             Py_ssize_t num_of_infection_terms=self.infection_terms.shape[0]
  __pyx_v_num_of_infection_terms = (__pyx_v_self->infection_terms->dimensions[0]);
+5141:             double [:, :] l=np.zeros((num_of_infection_terms, self.M), dtype=DTYPE)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_num_of_infection_terms); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.M); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
  __pyx_t_2 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 5141, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 5141, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_l = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
+5142:             double [:] fi=self.fi
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fi), PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 5142, __pyx_L1_error)
  __pyx_v_fi = __pyx_t_7;
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
+5143:         self.CM = self.contactMatrix(t)
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_t); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_self->__pyx_base.contactMatrix);
  __pyx_t_4 = __pyx_v_self->__pyx_base.contactMatrix; __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5143, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.CM);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.CM));
  __pyx_v_self->__pyx_base.CM = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
+5144:         if self.time_dep_param_mapping is not None:
  __pyx_t_8 = (__pyx_v_self->time_dep_param_mapping != Py_None);
  __pyx_t_9 = (__pyx_t_8 != 0);
  if (__pyx_t_9) {
/* … */
  }
+5145:             self.set_time_dep_model_parameters(t)
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_time_dep_model_parameters); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5145, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyFloat_FromDouble(__pyx_v_t); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5145, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5145, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+5146:         if self.constant_terms.size > 0:
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->constant_terms), __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5146, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 5146, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_9) {
/* … */
  }
+5147:             fi = x[(nClass-1)*M:]
    __pyx_t_7.data = __pyx_v_x.data;
    __pyx_t_7.memview = __pyx_v_x.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_7, 0);
    __pyx_t_10 = -1;
    if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_7,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_10,
    ((__pyx_v_nClass - 1) * __pyx_v_M),
    0,
    0,
    1,
    0,
    0,
    1) < 0))
{
    __PYX_ERR(0, 5147, __pyx_L1_error)
}

__PYX_XDEC_MEMVIEW(&__pyx_v_fi, 1);
    __pyx_v_fi = __pyx_t_7;
    __pyx_t_7.memview = NULL;
    __pyx_t_7.data = NULL;
+5148:         self.fill_lambdas(x, l)
  __pyx_t_4 = ((struct __pyx_vtabstruct_6pyross_9inference_Model *)__pyx_v_self->__pyx_base.__pyx_vtab)->fill_lambdas(__pyx_v_self, __pyx_v_x, __pyx_v_l); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+5149:         self.fill_finres_pop(x)
  __pyx_t_4 = ((struct __pyx_vtabstruct_6pyross_9inference_Model *)__pyx_v_self->__pyx_base.__pyx_vtab)->fill_finres_pop(__pyx_v_self, __pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+5150:         if b_matrix:
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_b_matrix); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 5150, __pyx_L1_error)
  if (__pyx_t_9) {
/* … */
  }
+5151:             self.B = np.zeros((nClass, M, nClass, M), dtype=DTYPE)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5151, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5151, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_nClass); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5151, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_M); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5151, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_nClass); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5151, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_11 = PyInt_FromSsize_t(__pyx_v_M); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5151, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_12 = PyTuple_New(4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5151, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_12, 3, __pyx_t_11);
    __pyx_t_4 = 0;
    __pyx_t_5 = 0;
    __pyx_t_3 = 0;
    __pyx_t_11 = 0;
    __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5151, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_12);
    __pyx_t_12 = 0;
    __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5151, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5151, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 5151, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5151, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5151, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_v_self->__pyx_base.B);
    __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.B));
    __pyx_v_self->__pyx_base.B = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
+5152:             self.noise_correlation(x, l)
    __pyx_t_3 = ((struct __pyx_vtabstruct_6pyross_9inference_Model *)__pyx_v_self->__pyx_base.__pyx_vtab)->noise_correlation(__pyx_v_self, __pyx_v_x, __pyx_v_l); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5152, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+5153:         if jacobian:
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_jacobian); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 5153, __pyx_L1_error)
  if (__pyx_t_9) {
/* … */
  }
+5154:             self.J = np.zeros((nClass, M, nClass, M), dtype=DTYPE)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5154, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5154, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_nClass); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5154, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_11 = PyInt_FromSsize_t(__pyx_v_M); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5154, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_nClass); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5154, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_M); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5154, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5154, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_5);
    __pyx_t_3 = 0;
    __pyx_t_11 = 0;
    __pyx_t_2 = 0;
    __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5154, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5154, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5154, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 5154, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5154, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5154, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_v_self->__pyx_base.J);
    __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.J));
    __pyx_v_self->__pyx_base.J = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
+5155:             self.jacobian(x, l)
    __pyx_t_2 = ((struct __pyx_vtabstruct_6pyross_9inference_Model *)__pyx_v_self->__pyx_base.__pyx_vtab)->jacobian(__pyx_v_self, __pyx_v_x, __pyx_v_l); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5155, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 5156: 
+5157:     cdef fill_lambdas(self, double [:] x, double [:, :] l):
static PyObject *__pyx_f_6pyross_9inference_5Model_fill_lambdas(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self, __Pyx_memviewslice __pyx_v_x, __Pyx_memviewslice __pyx_v_l) {
  __Pyx_memviewslice __pyx_v_CM = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_infection_terms = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_fi = { 0, 0, { 0 }, { 0 }, { 0 } };
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_n;
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_infective_index;
  Py_ssize_t __pyx_v_index;
  Py_ssize_t __pyx_v_M;
  Py_ssize_t __pyx_v_num_of_infection_terms;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fill_lambdas", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __Pyx_AddTraceback("pyross.inference.Model.fill_lambdas", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_CM, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_infection_terms, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fi, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5158:         cdef:
+5159:             double [:, :] CM=self.CM
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(((PyObject *)__pyx_v_self->__pyx_base.CM), PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 5159, __pyx_L1_error)
  __pyx_v_CM = __pyx_t_1;
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
+5160:             int [:, :] infection_terms=self.infection_terms
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_dsds_int(((PyObject *)__pyx_v_self->infection_terms), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 5160, __pyx_L1_error)
  __pyx_v_infection_terms = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
 5161:             double infection_rate
+5162:             double [:] fi=self.fi
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fi), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 5162, __pyx_L1_error)
  __pyx_v_fi = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
+5163:             Py_ssize_t m, n, i, infective_index, index, M=self.M, num_of_infection_terms=infection_terms.shape[0]
  __pyx_t_4 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_4;
  __pyx_v_num_of_infection_terms = (__pyx_v_infection_terms.shape[0]);
+5164:         for i in range(num_of_infection_terms):
  __pyx_t_4 = __pyx_v_num_of_infection_terms;
  __pyx_t_5 = __pyx_t_4;
  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
    __pyx_v_i = __pyx_t_6;
+5165:             infective_index = infection_terms[i, 1]
    __pyx_t_7 = __pyx_v_i;
    __pyx_t_8 = 1;
    __pyx_v_infective_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_infection_terms.data + __pyx_t_7 * __pyx_v_infection_terms.strides[0]) ) + __pyx_t_8 * __pyx_v_infection_terms.strides[1]) )));
+5166:             for m in range(M):
    __pyx_t_9 = __pyx_v_M;
    __pyx_t_10 = __pyx_t_9;
    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
      __pyx_v_m = __pyx_t_11;
+5167:                 for n in range(M):
      __pyx_t_12 = __pyx_v_M;
      __pyx_t_13 = __pyx_t_12;
      for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
        __pyx_v_n = __pyx_t_14;
+5168:                     index = n + M*infective_index
        __pyx_v_index = (__pyx_v_n + (__pyx_v_M * __pyx_v_infective_index));
+5169:                     if fi[n]>0:
        __pyx_t_8 = __pyx_v_n;
        __pyx_t_15 = (((*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_8 * __pyx_v_fi.strides[0]) ))) > 0.0) != 0);
        if (__pyx_t_15) {
/* … */
        }
      }
    }
  }
+5170:                         l[i, m] += CM[m,n]*x[index]/fi[n]
          __pyx_t_8 = __pyx_v_m;
          __pyx_t_7 = __pyx_v_n;
          __pyx_t_16 = __pyx_v_index;
          __pyx_t_17 = __pyx_v_n;
          __pyx_t_18 = __pyx_v_i;
          __pyx_t_19 = __pyx_v_m;
          *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_l.data + __pyx_t_18 * __pyx_v_l.strides[0]) ) + __pyx_t_19 * __pyx_v_l.strides[1]) )) += (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_8 * __pyx_v_CM.strides[0]) ) + __pyx_t_7 * __pyx_v_CM.strides[1]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_x.data + __pyx_t_16 * __pyx_v_x.strides[0]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_17 * __pyx_v_fi.strides[0]) ))));
 5171: 
+5172:     cdef fill_finres_pop(self, double [:] x):
static PyObject *__pyx_f_6pyross_9inference_5Model_fill_finres_pop(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self, __Pyx_memviewslice __pyx_v_x) {
  Py_ssize_t __pyx_v_class_index;
  Py_ssize_t __pyx_v_priority_index;
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_v_ndx = NULL;
  PyObject *__pyx_v_n_cohorts = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fill_finres_pop", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(((PyObject *)__pyx_t_16));
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_AddTraceback("pyross.inference.Model.fill_finres_pop", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ndx);
  __Pyx_XDECREF(__pyx_v_n_cohorts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5173:         # Calculate populations for finite resource transitions
 5174:         cdef:
 5175:             Py_ssize_t class_index, priority_index, m, i
+5176:         for i in range(len(self.resource_list)):
  __pyx_t_1 = ((PyObject *)__pyx_v_self->resource_list);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 5176, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_i = __pyx_t_4;
+5177:             ndx = self.resource_list[i][0]
    __pyx_t_1 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->resource_list), __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5177, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5177, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_ndx, __pyx_t_5);
    __pyx_t_5 = 0;
+5178:             n_cohorts = self.model_parameters_length[ndx]
    __pyx_t_5 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self->model_parameters_length), __pyx_v_ndx); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5178, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_n_cohorts, __pyx_t_5);
    __pyx_t_5 = 0;
+5179:             if n_cohorts == 1:
    __pyx_t_5 = __Pyx_PyInt_EqObjC(__pyx_v_n_cohorts, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5179, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 5179, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_6) {
/* … */
      goto __pyx_L5;
    }
+5180:                 self.finres_pop[i] = 0
      if (unlikely(__Pyx_SetItemInt(((PyObject *)__pyx_v_self->finres_pop), __pyx_v_i, __pyx_int_0, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0)) __PYX_ERR(0, 5180, __pyx_L1_error)
 5181:             else:
+5182:                 self.finres_pop[i] = np.zeros(n_cohorts)
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5182, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5182, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_7, function);
        }
      }
      __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_1, __pyx_v_n_cohorts) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_n_cohorts);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5182, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(__Pyx_SetItemInt(((PyObject *)__pyx_v_self->finres_pop), __pyx_v_i, __pyx_t_5, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0)) __PYX_ERR(0, 5182, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_L5:;
+5183:             for (class_index, priority_index) in self.resource_list[i][1:]:
    __pyx_t_5 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->resource_list), __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5183, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_t_5, 1, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5183, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (likely(PyList_CheckExact(__pyx_t_7)) || PyTuple_CheckExact(__pyx_t_7)) {
      __pyx_t_5 = __pyx_t_7; __Pyx_INCREF(__pyx_t_5); __pyx_t_8 = 0;
      __pyx_t_9 = NULL;
    } else {
      __pyx_t_8 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5183, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_9 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5183, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    for (;;) {
      if (likely(!__pyx_t_9)) {
        if (likely(PyList_CheckExact(__pyx_t_5))) {
          if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_7); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 5183, __pyx_L1_error)
          #else
          __pyx_t_7 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5183, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          #endif
        } else {
          if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_7); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 5183, __pyx_L1_error)
          #else
          __pyx_t_7 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5183, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          #endif
        }
      } else {
        __pyx_t_7 = __pyx_t_9(__pyx_t_5);
        if (unlikely(!__pyx_t_7)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 5183, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_7);
      }
      if ((likely(PyTuple_CheckExact(__pyx_t_7))) || (PyList_CheckExact(__pyx_t_7))) {
        PyObject* sequence = __pyx_t_7;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 5183, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_10 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_10);
        #else
        __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5183, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5183, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        #endif
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_11 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5183, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext;
        index = 0; __pyx_t_1 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_1)) goto __pyx_L8_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_1);
        index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L8_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_10);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) __PYX_ERR(0, 5183, __pyx_L1_error)
        __pyx_t_12 = NULL;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        goto __pyx_L9_unpacking_done;
        __pyx_L8_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_12 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 5183, __pyx_L1_error)
        __pyx_L9_unpacking_done:;
      }
      __pyx_t_13 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_13 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 5183, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_14 = __Pyx_PyIndex_AsSsize_t(__pyx_t_10); if (unlikely((__pyx_t_14 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 5183, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_v_class_index = __pyx_t_13;
      __pyx_v_priority_index = __pyx_t_14;
/* … */
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
+5184:                 for m in range(self.M):
      __pyx_t_14 = __pyx_v_self->__pyx_base.M;
      __pyx_t_13 = __pyx_t_14;
      for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_13; __pyx_t_15+=1) {
        __pyx_v_m = __pyx_t_15;
+5185:                     if n_cohorts == 1:
        __pyx_t_7 = __Pyx_PyInt_EqObjC(__pyx_v_n_cohorts, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5185, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 5185, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (__pyx_t_6) {
/* … */
          goto __pyx_L12;
        }
+5186:                         self.finres_pop[i] += x[m + self.M*class_index] * self.model_parameters[priority_index, m]
          __Pyx_INCREF(((PyObject *)__pyx_v_self->finres_pop));
          __pyx_t_16 = __pyx_v_self->finres_pop;
          __pyx_t_17 = __pyx_v_i;
          __pyx_t_7 = __Pyx_GetItemInt(((PyObject *)__pyx_t_16), __pyx_t_17, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5186, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_18 = (__pyx_v_m + (__pyx_v_self->__pyx_base.M * __pyx_v_class_index));
          __pyx_t_10 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_x.data + __pyx_t_18 * __pyx_v_x.strides[0]) )))); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5186, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_priority_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5186, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_11 = PyInt_FromSsize_t(__pyx_v_m); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5186, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_19 = PyTuple_New(2); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5186, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_19);
          __Pyx_GIVEREF(__pyx_t_1);
          PyTuple_SET_ITEM(__pyx_t_19, 0, __pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_11);
          PyTuple_SET_ITEM(__pyx_t_19, 1, __pyx_t_11);
          __pyx_t_1 = 0;
          __pyx_t_11 = 0;
          __pyx_t_11 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self->model_parameters), __pyx_t_19); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5186, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          __pyx_t_19 = PyNumber_Multiply(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5186, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_19);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = PyNumber_InPlaceAdd(__pyx_t_7, __pyx_t_19); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5186, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          if (unlikely(__Pyx_SetItemInt(((PyObject *)__pyx_t_16), __pyx_t_17, __pyx_t_11, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0)) __PYX_ERR(0, 5186, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0;
 5187:                     else:
+5188:                         self.finres_pop[i][m] += x[m + self.M*class_index] * self.model_parameters[priority_index, m]
        /*else*/ {
          __pyx_t_11 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->finres_pop), __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5188, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_17 = __pyx_v_m;
          __pyx_t_19 = __Pyx_GetItemInt(__pyx_t_11, __pyx_t_17, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5188, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_19);
          __pyx_t_18 = (__pyx_v_m + (__pyx_v_self->__pyx_base.M * __pyx_v_class_index));
          __pyx_t_7 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_x.data + __pyx_t_18 * __pyx_v_x.strides[0]) )))); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5188, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_10 = PyInt_FromSsize_t(__pyx_v_priority_index); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5188, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5188, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_20 = PyTuple_New(2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 5188, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_20);
          __Pyx_GIVEREF(__pyx_t_10);
          PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_10);
          __Pyx_GIVEREF(__pyx_t_1);
          PyTuple_SET_ITEM(__pyx_t_20, 1, __pyx_t_1);
          __pyx_t_10 = 0;
          __pyx_t_1 = 0;
          __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self->model_parameters), __pyx_t_20); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5188, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
          __pyx_t_20 = PyNumber_Multiply(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 5188, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_20);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_t_19, __pyx_t_20); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5188, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
          if (unlikely(__Pyx_SetItemInt(__pyx_t_11, __pyx_t_17, __pyx_t_1, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0)) __PYX_ERR(0, 5188, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        }
        __pyx_L12:;
      }
 5189: 
+5190:     cdef jacobian(self, double [:] x, double [:, :] l):
static PyObject *__pyx_f_6pyross_9inference_5Model_jacobian(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self, __Pyx_memviewslice __pyx_v_x, __Pyx_memviewslice __pyx_v_l) {
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_n;
  Py_ssize_t __pyx_v_M;
  Py_ssize_t __pyx_v_dim;
  Py_ssize_t __pyx_v_rate_index;
  Py_ssize_t __pyx_v_infective_index;
  Py_ssize_t __pyx_v_product_index;
  Py_ssize_t __pyx_v_reagent_index;
  Py_ssize_t __pyx_v_susceptible_index;
  Py_ssize_t __pyx_v_resource_index;
  Py_ssize_t __pyx_v_priority_index;
  Py_ssize_t __pyx_v_probability_index;
  Py_ssize_t __pyx_v_class_index;
  Py_ssize_t __pyx_v_res_class_index;
  Py_ssize_t __pyx_v_res_priority_index;
  __Pyx_memviewslice __pyx_v_J = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_CM = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_parameters = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_linear_terms = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_infection_terms = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_finres_terms = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_v_resource_list = 0;
  PyArrayObject *__pyx_v_finres_pop = 0;
  __Pyx_memviewslice __pyx_v_rate = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_term;
  double __pyx_v_term2;
  double __pyx_v_frp;
  __Pyx_memviewslice __pyx_v_fi = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("jacobian", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_XDECREF(__pyx_t_26);
  __Pyx_XDECREF(__pyx_t_27);
  __Pyx_XDECREF(__pyx_t_30);
  __Pyx_AddTraceback("pyross.inference.Model.jacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_J, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_CM, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_parameters, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_linear_terms, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_infection_terms, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_finres_terms, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_resource_list);
  __Pyx_XDECREF((PyObject *)__pyx_v_finres_pop);
  __PYX_XDEC_MEMVIEW(&__pyx_v_rate, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_fi, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5191:         cdef:
+5192:             Py_ssize_t i, m, n, M=self.M, dim=self.dim
  __pyx_t_1 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_1;
  __pyx_t_1 = __pyx_v_self->__pyx_base.dim;
  __pyx_v_dim = __pyx_t_1;
 5193:             Py_ssize_t rate_index, infective_index, product_index, reagent_index, susceptible_index
 5194:             Py_ssize_t resource_index, priority_index, probability_index, class_index, res_class_index, res_priority_index
+5195:             double [:, :, :, :] J = self.J
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(((PyObject *)__pyx_v_self->__pyx_base.J), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 5195, __pyx_L1_error)
  __pyx_v_J = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+5196:             double [:, :] CM=self.CM
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(((PyObject *)__pyx_v_self->__pyx_base.CM), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 5196, __pyx_L1_error)
  __pyx_v_CM = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
+5197:             double [:, :] parameters=self.model_parameters
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(((PyObject *)__pyx_v_self->model_parameters), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 5197, __pyx_L1_error)
  __pyx_v_parameters = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
+5198:             int [:, :] linear_terms=self.linear_terms, infection_terms=self.infection_terms
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsds_int(((PyObject *)__pyx_v_self->linear_terms), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 5198, __pyx_L1_error)
  __pyx_v_linear_terms = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsds_int(((PyObject *)__pyx_v_self->infection_terms), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 5198, __pyx_L1_error)
  __pyx_v_infection_terms = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
+5199:             int [:, :] finres_terms=self.finres_terms
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsds_int(((PyObject *)__pyx_v_self->finres_terms), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 5199, __pyx_L1_error)
  __pyx_v_finres_terms = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
+5200:             np.ndarray resource_list=self.resource_list
  __pyx_t_5 = ((PyObject *)__pyx_v_self->resource_list);
  __Pyx_INCREF(__pyx_t_5);
  __pyx_v_resource_list = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
+5201:             np.ndarray finres_pop = self.finres_pop
  __pyx_t_5 = ((PyObject *)__pyx_v_self->finres_pop);
  __Pyx_INCREF(__pyx_t_5);
  __pyx_v_finres_pop = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
 5202:             double [:] rate
 5203:             double term, term2, frp
+5204:             double [:] fi=self.fi
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_self->__pyx_base.fi), PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 5204, __pyx_L1_error)
  __pyx_v_fi = __pyx_t_6;
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
 5205: 
 5206:         # infection terms
+5207:         for i in range(infection_terms.shape[0]):
  __pyx_t_1 = (__pyx_v_infection_terms.shape[0]);
  __pyx_t_7 = __pyx_t_1;
  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
    __pyx_v_i = __pyx_t_8;
+5208:             rate_index = infection_terms[i, 0]
    __pyx_t_9 = __pyx_v_i;
    __pyx_t_10 = 0;
    __pyx_v_rate_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_infection_terms.data + __pyx_t_9 * __pyx_v_infection_terms.strides[0]) ) + __pyx_t_10 * __pyx_v_infection_terms.strides[1]) )));
+5209:             infective_index = infection_terms[i, 1]
    __pyx_t_10 = __pyx_v_i;
    __pyx_t_9 = 1;
    __pyx_v_infective_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_infection_terms.data + __pyx_t_10 * __pyx_v_infection_terms.strides[0]) ) + __pyx_t_9 * __pyx_v_infection_terms.strides[1]) )));
+5210:             susceptible_index = infection_terms[i, 2]
    __pyx_t_9 = __pyx_v_i;
    __pyx_t_10 = 2;
    __pyx_v_susceptible_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_infection_terms.data + __pyx_t_9 * __pyx_v_infection_terms.strides[0]) ) + __pyx_t_10 * __pyx_v_infection_terms.strides[1]) )));
+5211:             product_index = infection_terms[i, 3]
    __pyx_t_10 = __pyx_v_i;
    __pyx_t_9 = 3;
    __pyx_v_product_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_infection_terms.data + __pyx_t_10 * __pyx_v_infection_terms.strides[0]) ) + __pyx_t_9 * __pyx_v_infection_terms.strides[1]) )));
 5212: 
+5213:             rate = parameters[rate_index]
    __pyx_t_6.data = __pyx_v_parameters.data;
    __pyx_t_6.memview = __pyx_v_parameters.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_6, 0);
    {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_rate_index;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_parameters.strides[0];
        __pyx_t_6.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_6.shape[0] = __pyx_v_parameters.shape[1];
__pyx_t_6.strides[0] = __pyx_v_parameters.strides[1];
    __pyx_t_6.suboffsets[0] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_v_rate, 1);
    __pyx_v_rate = __pyx_t_6;
    __pyx_t_6.memview = NULL;
    __pyx_t_6.data = NULL;
+5214:             for m in range(M):
    __pyx_t_11 = __pyx_v_M;
    __pyx_t_12 = __pyx_t_11;
    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
      __pyx_v_m = __pyx_t_13;
+5215:                 J[susceptible_index, m, susceptible_index, m] -= rate[m]*l[i, m]
      __pyx_t_9 = __pyx_v_m;
      __pyx_t_10 = __pyx_v_i;
      __pyx_t_14 = __pyx_v_m;
      __pyx_t_15 = __pyx_v_susceptible_index;
      __pyx_t_16 = __pyx_v_m;
      __pyx_t_17 = __pyx_v_susceptible_index;
      __pyx_t_18 = __pyx_v_m;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_15 * __pyx_v_J.strides[0]) ) + __pyx_t_16 * __pyx_v_J.strides[1]) ) + __pyx_t_17 * __pyx_v_J.strides[2]) ) + __pyx_t_18 * __pyx_v_J.strides[3]) )) -= ((*((double *) ( /* dim=0 */ (__pyx_v_rate.data + __pyx_t_9 * __pyx_v_rate.strides[0]) ))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_l.data + __pyx_t_10 * __pyx_v_l.strides[0]) ) + __pyx_t_14 * __pyx_v_l.strides[1]) ))));
+5216:                 if product_index>-1:
      __pyx_t_19 = ((__pyx_v_product_index > -1L) != 0);
      if (__pyx_t_19) {
/* … */
      }
+5217:                     J[product_index, m, susceptible_index, m] += rate[m]*l[i, m]
        __pyx_t_14 = __pyx_v_m;
        __pyx_t_10 = __pyx_v_i;
        __pyx_t_9 = __pyx_v_m;
        __pyx_t_18 = __pyx_v_product_index;
        __pyx_t_17 = __pyx_v_m;
        __pyx_t_16 = __pyx_v_susceptible_index;
        __pyx_t_15 = __pyx_v_m;
        *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_18 * __pyx_v_J.strides[0]) ) + __pyx_t_17 * __pyx_v_J.strides[1]) ) + __pyx_t_16 * __pyx_v_J.strides[2]) ) + __pyx_t_15 * __pyx_v_J.strides[3]) )) += ((*((double *) ( /* dim=0 */ (__pyx_v_rate.data + __pyx_t_14 * __pyx_v_rate.strides[0]) ))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_l.data + __pyx_t_10 * __pyx_v_l.strides[0]) ) + __pyx_t_9 * __pyx_v_l.strides[1]) ))));
+5218:                 for n in range(M):
      __pyx_t_20 = __pyx_v_M;
      __pyx_t_21 = __pyx_t_20;
      for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
        __pyx_v_n = __pyx_t_22;
+5219:                     J[susceptible_index, m, infective_index, n] -= x[susceptible_index*M+m]*rate[m]*CM[m, n]/fi[n]
        __pyx_t_9 = ((__pyx_v_susceptible_index * __pyx_v_M) + __pyx_v_m);
        __pyx_t_10 = __pyx_v_m;
        __pyx_t_14 = __pyx_v_m;
        __pyx_t_15 = __pyx_v_n;
        __pyx_t_16 = __pyx_v_n;
        __pyx_t_17 = __pyx_v_susceptible_index;
        __pyx_t_18 = __pyx_v_m;
        __pyx_t_23 = __pyx_v_infective_index;
        __pyx_t_24 = __pyx_v_n;
        *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_17 * __pyx_v_J.strides[0]) ) + __pyx_t_18 * __pyx_v_J.strides[1]) ) + __pyx_t_23 * __pyx_v_J.strides[2]) ) + __pyx_t_24 * __pyx_v_J.strides[3]) )) -= ((((*((double *) ( /* dim=0 */ (__pyx_v_x.data + __pyx_t_9 * __pyx_v_x.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_rate.data + __pyx_t_10 * __pyx_v_rate.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_14 * __pyx_v_CM.strides[0]) ) + __pyx_t_15 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_16 * __pyx_v_fi.strides[0]) ))));
+5220:                     if product_index>-1:
        __pyx_t_19 = ((__pyx_v_product_index > -1L) != 0);
        if (__pyx_t_19) {
/* … */
        }
      }
    }
  }
+5221:                         J[product_index, m, infective_index, n] += x[susceptible_index*M+m]*rate[m]*CM[m, n]/fi[n]
          __pyx_t_16 = ((__pyx_v_susceptible_index * __pyx_v_M) + __pyx_v_m);
          __pyx_t_15 = __pyx_v_m;
          __pyx_t_14 = __pyx_v_m;
          __pyx_t_10 = __pyx_v_n;
          __pyx_t_9 = __pyx_v_n;
          __pyx_t_24 = __pyx_v_product_index;
          __pyx_t_23 = __pyx_v_m;
          __pyx_t_18 = __pyx_v_infective_index;
          __pyx_t_17 = __pyx_v_n;
          *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_24 * __pyx_v_J.strides[0]) ) + __pyx_t_23 * __pyx_v_J.strides[1]) ) + __pyx_t_18 * __pyx_v_J.strides[2]) ) + __pyx_t_17 * __pyx_v_J.strides[3]) )) += ((((*((double *) ( /* dim=0 */ (__pyx_v_x.data + __pyx_t_16 * __pyx_v_x.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_rate.data + __pyx_t_15 * __pyx_v_rate.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_CM.data + __pyx_t_14 * __pyx_v_CM.strides[0]) ) + __pyx_t_10 * __pyx_v_CM.strides[1]) )))) / (*((double *) ( /* dim=0 */ (__pyx_v_fi.data + __pyx_t_9 * __pyx_v_fi.strides[0]) ))));
 5222: 
 5223:         # linear terms
+5224:         for i in range(linear_terms.shape[0]):
  __pyx_t_1 = (__pyx_v_linear_terms.shape[0]);
  __pyx_t_7 = __pyx_t_1;
  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
    __pyx_v_i = __pyx_t_8;
+5225:             product_index = linear_terms[i, 2]
    __pyx_t_9 = __pyx_v_i;
    __pyx_t_10 = 2;
    __pyx_v_product_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_linear_terms.data + __pyx_t_9 * __pyx_v_linear_terms.strides[0]) ) + __pyx_t_10 * __pyx_v_linear_terms.strides[1]) )));
+5226:             reagent_index = linear_terms[i, 1]
    __pyx_t_10 = __pyx_v_i;
    __pyx_t_9 = 1;
    __pyx_v_reagent_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_linear_terms.data + __pyx_t_10 * __pyx_v_linear_terms.strides[0]) ) + __pyx_t_9 * __pyx_v_linear_terms.strides[1]) )));
+5227:             rate_index = linear_terms[i, 0]
    __pyx_t_9 = __pyx_v_i;
    __pyx_t_10 = 0;
    __pyx_v_rate_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_linear_terms.data + __pyx_t_9 * __pyx_v_linear_terms.strides[0]) ) + __pyx_t_10 * __pyx_v_linear_terms.strides[1]) )));
+5228:             rate = parameters[rate_index]
    __pyx_t_6.data = __pyx_v_parameters.data;
    __pyx_t_6.memview = __pyx_v_parameters.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_6, 0);
    {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_rate_index;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_parameters.strides[0];
        __pyx_t_6.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_6.shape[0] = __pyx_v_parameters.shape[1];
__pyx_t_6.strides[0] = __pyx_v_parameters.strides[1];
    __pyx_t_6.suboffsets[0] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_v_rate, 1);
    __pyx_v_rate = __pyx_t_6;
    __pyx_t_6.memview = NULL;
    __pyx_t_6.data = NULL;
+5229:             for m in range(M):
    __pyx_t_11 = __pyx_v_M;
    __pyx_t_12 = __pyx_t_11;
    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
      __pyx_v_m = __pyx_t_13;
+5230:                 J[reagent_index, m, reagent_index, m] -= rate[m]
      __pyx_t_10 = __pyx_v_m;
      __pyx_t_9 = __pyx_v_reagent_index;
      __pyx_t_14 = __pyx_v_m;
      __pyx_t_15 = __pyx_v_reagent_index;
      __pyx_t_16 = __pyx_v_m;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_9 * __pyx_v_J.strides[0]) ) + __pyx_t_14 * __pyx_v_J.strides[1]) ) + __pyx_t_15 * __pyx_v_J.strides[2]) ) + __pyx_t_16 * __pyx_v_J.strides[3]) )) -= (*((double *) ( /* dim=0 */ (__pyx_v_rate.data + __pyx_t_10 * __pyx_v_rate.strides[0]) )));
+5231:                 if product_index>-1:
      __pyx_t_19 = ((__pyx_v_product_index > -1L) != 0);
      if (__pyx_t_19) {
/* … */
      }
    }
  }
+5232:                     J[product_index, m, reagent_index, m] += rate[m]
        __pyx_t_10 = __pyx_v_m;
        __pyx_t_16 = __pyx_v_product_index;
        __pyx_t_15 = __pyx_v_m;
        __pyx_t_14 = __pyx_v_reagent_index;
        __pyx_t_9 = __pyx_v_m;
        *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_16 * __pyx_v_J.strides[0]) ) + __pyx_t_15 * __pyx_v_J.strides[1]) ) + __pyx_t_14 * __pyx_v_J.strides[2]) ) + __pyx_t_9 * __pyx_v_J.strides[3]) )) += (*((double *) ( /* dim=0 */ (__pyx_v_rate.data + __pyx_t_10 * __pyx_v_rate.strides[0]) )));
 5233: 
 5234:         # finite-resource terms
+5235:         if finres_terms.size > 0:
  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_finres_terms, 2, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_size); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyObject_RichCompare(__pyx_t_25, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5235, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_19 < 0)) __PYX_ERR(0, 5235, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__pyx_t_19) {
/* … */
  }
+5236:             for i in range(finres_terms.shape[0]):
    __pyx_t_1 = (__pyx_v_finres_terms.shape[0]);
    __pyx_t_7 = __pyx_t_1;
    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
      __pyx_v_i = __pyx_t_8;
+5237:                 resource_index = finres_terms[i, 0]
      __pyx_t_10 = __pyx_v_i;
      __pyx_t_9 = 0;
      __pyx_v_resource_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_finres_terms.data + __pyx_t_10 * __pyx_v_finres_terms.strides[0]) ) + __pyx_t_9 * __pyx_v_finres_terms.strides[1]) )));
+5238:                 rate_index = resource_list[resource_index][0]
      __pyx_t_5 = __Pyx_GetItemInt(((PyObject *)__pyx_v_resource_list), __pyx_v_resource_index, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5238, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_25 = __Pyx_GetItemInt(__pyx_t_5, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5238, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_25); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 5238, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
      __pyx_v_rate_index = __pyx_t_11;
+5239:                 priority_index = finres_terms[i, 1]
      __pyx_t_9 = __pyx_v_i;
      __pyx_t_10 = 1;
      __pyx_v_priority_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_finres_terms.data + __pyx_t_9 * __pyx_v_finres_terms.strides[0]) ) + __pyx_t_10 * __pyx_v_finres_terms.strides[1]) )));
+5240:                 probability_index = finres_terms[i, 2]
      __pyx_t_10 = __pyx_v_i;
      __pyx_t_9 = 2;
      __pyx_v_probability_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_finres_terms.data + __pyx_t_10 * __pyx_v_finres_terms.strides[0]) ) + __pyx_t_9 * __pyx_v_finres_terms.strides[1]) )));
+5241:                 class_index = finres_terms[i, 3]
      __pyx_t_9 = __pyx_v_i;
      __pyx_t_10 = 3;
      __pyx_v_class_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_finres_terms.data + __pyx_t_9 * __pyx_v_finres_terms.strides[0]) ) + __pyx_t_10 * __pyx_v_finres_terms.strides[1]) )));
+5242:                 reagent_index = self.finres_terms[i, 4]
      __pyx_t_25 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5242, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5242, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_25);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_25);
      __Pyx_INCREF(__pyx_int_4);
      __Pyx_GIVEREF(__pyx_int_4);
      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_4);
      __pyx_t_25 = 0;
      __pyx_t_25 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self->finres_terms), __pyx_t_5); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5242, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_25); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 5242, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
      __pyx_v_reagent_index = __pyx_t_11;
+5243:                 product_index = self.finres_terms[i, 5]
      __pyx_t_25 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5243, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5243, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_25);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_25);
      __Pyx_INCREF(__pyx_int_5);
      __Pyx_GIVEREF(__pyx_int_5);
      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_5);
      __pyx_t_25 = 0;
      __pyx_t_25 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self->finres_terms), __pyx_t_5); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5243, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_25); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 5243, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
      __pyx_v_product_index = __pyx_t_11;
+5244:                 for m in range(M):
      __pyx_t_11 = __pyx_v_M;
      __pyx_t_12 = __pyx_t_11;
      for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
        __pyx_v_m = __pyx_t_13;
+5245:                     if np.size(finres_pop[resource_index]) == 1:
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5245, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_26 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_size); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5245, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_26);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_GetItemInt(((PyObject *)__pyx_v_finres_pop), __pyx_v_resource_index, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5245, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_27 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_26))) {
          __pyx_t_27 = PyMethod_GET_SELF(__pyx_t_26);
          if (likely(__pyx_t_27)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_26);
            __Pyx_INCREF(__pyx_t_27);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_26, function);
          }
        }
        __pyx_t_25 = (__pyx_t_27) ? __Pyx_PyObject_Call2Args(__pyx_t_26, __pyx_t_27, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_26, __pyx_t_5);
        __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5245, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_25);
        __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
        __pyx_t_26 = __Pyx_PyInt_EqObjC(__pyx_t_25, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5245, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_26);
        __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
        __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_t_26); if (unlikely(__pyx_t_19 < 0)) __PYX_ERR(0, 5245, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
        if (__pyx_t_19) {
/* … */
          goto __pyx_L21;
        }
+5246:                         frp = finres_pop[resource_index]
          __pyx_t_26 = __Pyx_GetItemInt(((PyObject *)__pyx_v_finres_pop), __pyx_v_resource_index, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5246, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_26);
          __pyx_t_28 = __pyx_PyFloat_AsDouble(__pyx_t_26); if (unlikely((__pyx_t_28 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5246, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
          __pyx_v_frp = __pyx_t_28;
 5247:                     else:
+5248:                         frp = finres_pop[resource_index][m]
        /*else*/ {
          __pyx_t_26 = __Pyx_GetItemInt(((PyObject *)__pyx_v_finres_pop), __pyx_v_resource_index, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5248, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_26);
          __pyx_t_25 = __Pyx_GetItemInt(__pyx_t_26, __pyx_v_m, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5248, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_25);
          __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
          __pyx_t_28 = __pyx_PyFloat_AsDouble(__pyx_t_25); if (unlikely((__pyx_t_28 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5248, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
          __pyx_v_frp = __pyx_t_28;
        }
        __pyx_L21:;
+5249:                     if frp > 0.5 / self.Omega:
        __pyx_t_19 = ((__pyx_v_frp > (0.5 / __pyx_v_self->__pyx_base.Omega)) != 0);
        if (__pyx_t_19) {
/* … */
          goto __pyx_L22;
        }
+5250:                         term = parameters[rate_index, m] * parameters[priority_index, m] \
          __pyx_t_10 = __pyx_v_rate_index;
          __pyx_t_9 = __pyx_v_m;
          __pyx_t_14 = __pyx_v_priority_index;
          __pyx_t_15 = __pyx_v_m;
+5251:                                * parameters[probability_index, m] / (frp * self.Omega)
          __pyx_t_16 = __pyx_v_probability_index;
          __pyx_t_17 = __pyx_v_m;
          __pyx_v_term = ((((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_parameters.data + __pyx_t_10 * __pyx_v_parameters.strides[0]) ) + __pyx_t_9 * __pyx_v_parameters.strides[1]) ))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_parameters.data + __pyx_t_14 * __pyx_v_parameters.strides[0]) ) + __pyx_t_15 * __pyx_v_parameters.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_parameters.data + __pyx_t_16 * __pyx_v_parameters.strides[0]) ) + __pyx_t_17 * __pyx_v_parameters.strides[1]) )))) / (__pyx_v_frp * __pyx_v_self->__pyx_base.Omega));
 5252:                     else:
+5253:                         term = 0
        /*else*/ {
          __pyx_v_term = 0.0;
        }
        __pyx_L22:;
+5254:                     if reagent_index>-1:
        __pyx_t_19 = ((__pyx_v_reagent_index > -1L) != 0);
        if (__pyx_t_19) {
/* … */
        }
+5255:                         J[reagent_index, m, class_index, m] -= term
          __pyx_t_17 = __pyx_v_reagent_index;
          __pyx_t_16 = __pyx_v_m;
          __pyx_t_15 = __pyx_v_class_index;
          __pyx_t_14 = __pyx_v_m;
          *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_17 * __pyx_v_J.strides[0]) ) + __pyx_t_16 * __pyx_v_J.strides[1]) ) + __pyx_t_15 * __pyx_v_J.strides[2]) ) + __pyx_t_14 * __pyx_v_J.strides[3]) )) -= __pyx_v_term;
+5256:                     if product_index>-1:
        __pyx_t_19 = ((__pyx_v_product_index > -1L) != 0);
        if (__pyx_t_19) {
/* … */
        }
+5257:                         J[product_index, m, class_index, m] += term
          __pyx_t_14 = __pyx_v_product_index;
          __pyx_t_15 = __pyx_v_m;
          __pyx_t_16 = __pyx_v_class_index;
          __pyx_t_17 = __pyx_v_m;
          *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_14 * __pyx_v_J.strides[0]) ) + __pyx_t_15 * __pyx_v_J.strides[1]) ) + __pyx_t_16 * __pyx_v_J.strides[2]) ) + __pyx_t_17 * __pyx_v_J.strides[3]) )) += __pyx_v_term;
+5258:                     if frp > 0:
        __pyx_t_19 = ((__pyx_v_frp > 0.0) != 0);
        if (__pyx_t_19) {
/* … */
        }
+5259:                         term *= - x[class_index*M+m] / frp
          __pyx_t_17 = ((__pyx_v_class_index * __pyx_v_M) + __pyx_v_m);
          __pyx_v_term = (__pyx_v_term * ((-(*((double *) ( /* dim=0 */ (__pyx_v_x.data + __pyx_t_17 * __pyx_v_x.strides[0]) )))) / __pyx_v_frp));
+5260:                     for (res_class_index, res_priority_index) in resource_list[resource_index][1:]:
        __pyx_t_25 = __Pyx_GetItemInt(((PyObject *)__pyx_v_resource_list), __pyx_v_resource_index, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5260, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_25);
        __pyx_t_26 = __Pyx_PyObject_GetSlice(__pyx_t_25, 1, 0, NULL, NULL, &__pyx_slice__8, 1, 0, 0); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5260, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_26);
        __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
        if (likely(PyList_CheckExact(__pyx_t_26)) || PyTuple_CheckExact(__pyx_t_26)) {
          __pyx_t_25 = __pyx_t_26; __Pyx_INCREF(__pyx_t_25); __pyx_t_20 = 0;
          __pyx_t_29 = NULL;
        } else {
          __pyx_t_20 = -1; __pyx_t_25 = PyObject_GetIter(__pyx_t_26); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5260, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_25);
          __pyx_t_29 = Py_TYPE(__pyx_t_25)->tp_iternext; if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 5260, __pyx_L1_error)
        }
        __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
        for (;;) {
          if (likely(!__pyx_t_29)) {
            if (likely(PyList_CheckExact(__pyx_t_25))) {
              if (__pyx_t_20 >= PyList_GET_SIZE(__pyx_t_25)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_26 = PyList_GET_ITEM(__pyx_t_25, __pyx_t_20); __Pyx_INCREF(__pyx_t_26); __pyx_t_20++; if (unlikely(0 < 0)) __PYX_ERR(0, 5260, __pyx_L1_error)
              #else
              __pyx_t_26 = PySequence_ITEM(__pyx_t_25, __pyx_t_20); __pyx_t_20++; if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5260, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_26);
              #endif
            } else {
              if (__pyx_t_20 >= PyTuple_GET_SIZE(__pyx_t_25)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_26 = PyTuple_GET_ITEM(__pyx_t_25, __pyx_t_20); __Pyx_INCREF(__pyx_t_26); __pyx_t_20++; if (unlikely(0 < 0)) __PYX_ERR(0, 5260, __pyx_L1_error)
              #else
              __pyx_t_26 = PySequence_ITEM(__pyx_t_25, __pyx_t_20); __pyx_t_20++; if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5260, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_26);
              #endif
            }
          } else {
            __pyx_t_26 = __pyx_t_29(__pyx_t_25);
            if (unlikely(!__pyx_t_26)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 5260, __pyx_L1_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_26);
          }
          if ((likely(PyTuple_CheckExact(__pyx_t_26))) || (PyList_CheckExact(__pyx_t_26))) {
            PyObject* sequence = __pyx_t_26;
            Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
            if (unlikely(size != 2)) {
              if (size > 2) __Pyx_RaiseTooManyValuesError(2);
              else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
              __PYX_ERR(0, 5260, __pyx_L1_error)
            }
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            if (likely(PyTuple_CheckExact(sequence))) {
              __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
              __pyx_t_27 = PyTuple_GET_ITEM(sequence, 1); 
            } else {
              __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
              __pyx_t_27 = PyList_GET_ITEM(sequence, 1); 
            }
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(__pyx_t_27);
            #else
            __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5260, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_27 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5260, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_27);
            #endif
            __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
          } else {
            Py_ssize_t index = -1;
            __pyx_t_30 = PyObject_GetIter(__pyx_t_26); if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 5260, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_30);
            __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
            __pyx_t_31 = Py_TYPE(__pyx_t_30)->tp_iternext;
            index = 0; __pyx_t_5 = __pyx_t_31(__pyx_t_30); if (unlikely(!__pyx_t_5)) goto __pyx_L28_unpacking_failed;
            __Pyx_GOTREF(__pyx_t_5);
            index = 1; __pyx_t_27 = __pyx_t_31(__pyx_t_30); if (unlikely(!__pyx_t_27)) goto __pyx_L28_unpacking_failed;
            __Pyx_GOTREF(__pyx_t_27);
            if (__Pyx_IternextUnpackEndCheck(__pyx_t_31(__pyx_t_30), 2) < 0) __PYX_ERR(0, 5260, __pyx_L1_error)
            __pyx_t_31 = NULL;
            __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
            goto __pyx_L29_unpacking_done;
            __pyx_L28_unpacking_failed:;
            __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
            __pyx_t_31 = NULL;
            if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
            __PYX_ERR(0, 5260, __pyx_L1_error)
            __pyx_L29_unpacking_done:;
          }
          __pyx_t_21 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_21 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 5260, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_22 = __Pyx_PyIndex_AsSsize_t(__pyx_t_27); if (unlikely((__pyx_t_22 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 5260, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
          __pyx_v_res_class_index = __pyx_t_21;
          __pyx_v_res_priority_index = __pyx_t_22;
/* … */
        }
        __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
      }
    }
+5261:                         if np.size(finres_pop[resource_index]) == 1:
          __Pyx_GetModuleGlobalName(__pyx_t_27, __pyx_n_s_np); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5261, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_27);
          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_27, __pyx_n_s_size); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5261, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
          __pyx_t_27 = __Pyx_GetItemInt(((PyObject *)__pyx_v_finres_pop), __pyx_v_resource_index, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5261, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_27);
          __pyx_t_30 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
            __pyx_t_30 = PyMethod_GET_SELF(__pyx_t_5);
            if (likely(__pyx_t_30)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
              __Pyx_INCREF(__pyx_t_30);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_5, function);
            }
          }
          __pyx_t_26 = (__pyx_t_30) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_30, __pyx_t_27) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_27);
          __Pyx_XDECREF(__pyx_t_30); __pyx_t_30 = 0;
          __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
          if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5261, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_26);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = __Pyx_PyInt_EqObjC(__pyx_t_26, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5261, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
          __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_19 < 0)) __PYX_ERR(0, 5261, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (__pyx_t_19) {
/* … */
            goto __pyx_L30;
          }
+5262:                             for n in range(M):
            __pyx_t_22 = __pyx_v_M;
            __pyx_t_21 = __pyx_t_22;
            for (__pyx_t_32 = 0; __pyx_t_32 < __pyx_t_21; __pyx_t_32+=1) {
              __pyx_v_n = __pyx_t_32;
+5263:                                 term2 = term * parameters[res_priority_index, n]
              __pyx_t_17 = __pyx_v_res_priority_index;
              __pyx_t_16 = __pyx_v_n;
              __pyx_v_term2 = (__pyx_v_term * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_parameters.data + __pyx_t_17 * __pyx_v_parameters.strides[0]) ) + __pyx_t_16 * __pyx_v_parameters.strides[1]) ))));
+5264:                                 if reagent_index>-1:
              __pyx_t_19 = ((__pyx_v_reagent_index > -1L) != 0);
              if (__pyx_t_19) {
/* … */
              }
+5265:                                     J[reagent_index, m, res_class_index, n] -= term2
                __pyx_t_16 = __pyx_v_reagent_index;
                __pyx_t_17 = __pyx_v_m;
                __pyx_t_15 = __pyx_v_res_class_index;
                __pyx_t_14 = __pyx_v_n;
                *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_16 * __pyx_v_J.strides[0]) ) + __pyx_t_17 * __pyx_v_J.strides[1]) ) + __pyx_t_15 * __pyx_v_J.strides[2]) ) + __pyx_t_14 * __pyx_v_J.strides[3]) )) -= __pyx_v_term2;
+5266:                                 if product_index>-1:
              __pyx_t_19 = ((__pyx_v_product_index > -1L) != 0);
              if (__pyx_t_19) {
/* … */
              }
            }
+5267:                                     J[product_index, m, res_class_index, n] += term2
                __pyx_t_14 = __pyx_v_product_index;
                __pyx_t_15 = __pyx_v_m;
                __pyx_t_17 = __pyx_v_res_class_index;
                __pyx_t_16 = __pyx_v_n;
                *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_14 * __pyx_v_J.strides[0]) ) + __pyx_t_15 * __pyx_v_J.strides[1]) ) + __pyx_t_17 * __pyx_v_J.strides[2]) ) + __pyx_t_16 * __pyx_v_J.strides[3]) )) += __pyx_v_term2;
 5268:                         else:
+5269:                             term2 = term * parameters[res_priority_index, m]
          /*else*/ {
            __pyx_t_16 = __pyx_v_res_priority_index;
            __pyx_t_17 = __pyx_v_m;
            __pyx_v_term2 = (__pyx_v_term * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_parameters.data + __pyx_t_16 * __pyx_v_parameters.strides[0]) ) + __pyx_t_17 * __pyx_v_parameters.strides[1]) ))));
+5270:                             if reagent_index>-1:
            __pyx_t_19 = ((__pyx_v_reagent_index > -1L) != 0);
            if (__pyx_t_19) {
/* … */
            }
+5271:                                 J[reagent_index, m, res_class_index, m] -= term2
              __pyx_t_17 = __pyx_v_reagent_index;
              __pyx_t_16 = __pyx_v_m;
              __pyx_t_15 = __pyx_v_res_class_index;
              __pyx_t_14 = __pyx_v_m;
              *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_17 * __pyx_v_J.strides[0]) ) + __pyx_t_16 * __pyx_v_J.strides[1]) ) + __pyx_t_15 * __pyx_v_J.strides[2]) ) + __pyx_t_14 * __pyx_v_J.strides[3]) )) -= __pyx_v_term2;
+5272:                             if product_index>-1:
            __pyx_t_19 = ((__pyx_v_product_index > -1L) != 0);
            if (__pyx_t_19) {
/* … */
            }
          }
          __pyx_L30:;
+5273:                                 J[product_index, m, res_class_index, m] += term2
              __pyx_t_14 = __pyx_v_product_index;
              __pyx_t_15 = __pyx_v_m;
              __pyx_t_16 = __pyx_v_res_class_index;
              __pyx_t_17 = __pyx_v_m;
              *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_J.data + __pyx_t_14 * __pyx_v_J.strides[0]) ) + __pyx_t_15 * __pyx_v_J.strides[1]) ) + __pyx_t_16 * __pyx_v_J.strides[2]) ) + __pyx_t_17 * __pyx_v_J.strides[3]) )) += __pyx_v_term2;
 5274: 
 5275: 
+5276:         self.J_mat = self.J.reshape((dim, dim))
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.J), __pyx_n_s_reshape); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5276, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_26 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5276, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_26);
  __pyx_t_27 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5276, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_27);
  __pyx_t_30 = PyTuple_New(2); if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 5276, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_30);
  __Pyx_GIVEREF(__pyx_t_26);
  PyTuple_SET_ITEM(__pyx_t_30, 0, __pyx_t_26);
  __Pyx_GIVEREF(__pyx_t_27);
  PyTuple_SET_ITEM(__pyx_t_30, 1, __pyx_t_27);
  __pyx_t_26 = 0;
  __pyx_t_27 = 0;
  __pyx_t_27 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_27 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_27)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_27);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_25 = (__pyx_t_27) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_27, __pyx_t_30) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_30);
  __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
  __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
  if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5276, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_25) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_25, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5276, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_25);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.J_mat);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.J_mat));
  __pyx_v_self->__pyx_base.J_mat = ((PyArrayObject *)__pyx_t_25);
  __pyx_t_25 = 0;
 5277: 
+5278:     cdef noise_correlation(self, double [:] x, double [:, :] l):
static PyObject *__pyx_f_6pyross_9inference_5Model_noise_correlation(struct __pyx_obj_6pyross_9inference_Model *__pyx_v_self, __Pyx_memviewslice __pyx_v_x, __Pyx_memviewslice __pyx_v_l) {
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_m;
  Py_ssize_t __pyx_v_M;
  Py_ssize_t __pyx_v_nClass;
  Py_ssize_t __pyx_v_class_index;
  Py_ssize_t __pyx_v_rate_index;
  CYTHON_UNUSED Py_ssize_t __pyx_v_infective_index;
  Py_ssize_t __pyx_v_product_index;
  Py_ssize_t __pyx_v_reagent_index;
  Py_ssize_t __pyx_v_overdispersion_index;
  Py_ssize_t __pyx_v_susceptible_index;
  Py_ssize_t __pyx_v_resource_index;
  Py_ssize_t __pyx_v_priority_index;
  Py_ssize_t __pyx_v_probability_index;
  __Pyx_memviewslice __pyx_v_B = { 0, 0, { 0 }, { 0 }, { 0 } };
  CYTHON_UNUSED __Pyx_memviewslice __pyx_v_CM = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_parameters = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_constant_terms = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_linear_terms = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_infection_terms = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_finres_terms = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_v_resource_list = 0;
  PyArrayObject *__pyx_v_finres_pop = 0;
  double __pyx_v_frp;
  __Pyx_memviewslice __pyx_v_s = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_reagent = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_rate = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_overdispersion = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_Omega;
  PyObject *__pyx_v_term = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("noise_correlation", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_2, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_27);
  __Pyx_AddTraceback("pyross.inference.Model.noise_correlation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_B, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_CM, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_parameters, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_constant_terms, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_linear_terms, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_infection_terms, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_finres_terms, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_resource_list);
  __Pyx_XDECREF((PyObject *)__pyx_v_finres_pop);
  __PYX_XDEC_MEMVIEW(&__pyx_v_s, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_reagent, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_rate, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_overdispersion, 1);
  __Pyx_XDECREF(__pyx_v_term);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5279:         cdef:
+5280:             Py_ssize_t i, m, n, M=self.M, nClass=self.nClass, class_index
  __pyx_t_1 = __pyx_v_self->__pyx_base.M;
  __pyx_v_M = __pyx_t_1;
  __pyx_t_1 = __pyx_v_self->__pyx_base.nClass;
  __pyx_v_nClass = __pyx_t_1;
 5281:             Py_ssize_t rate_index, infective_index, product_index, reagent_index, overdispersion_index, susceptible_index
 5282:             Py_ssize_t resource_index, priority_index, probability_index
+5283:             double [:, :, :, :] B=self.B
  __pyx_t_2 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_double(((PyObject *)__pyx_v_self->__pyx_base.B), PyBUF_WRITABLE); if (unlikely(!__pyx_t_2.memview)) __PYX_ERR(0, 5283, __pyx_L1_error)
  __pyx_v_B = __pyx_t_2;
  __pyx_t_2.memview = NULL;
  __pyx_t_2.data = NULL;
+5284:             double [:, :] CM=self.CM
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(((PyObject *)__pyx_v_self->__pyx_base.CM), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 5284, __pyx_L1_error)
  __pyx_v_CM = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
+5285:             double [:, :] parameters=self.model_parameters
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(((PyObject *)__pyx_v_self->model_parameters), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 5285, __pyx_L1_error)
  __pyx_v_parameters = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
+5286:             int [:, :] constant_terms=self.constant_terms
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsds_int(((PyObject *)__pyx_v_self->constant_terms), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 5286, __pyx_L1_error)
  __pyx_v_constant_terms = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
+5287:             int [:, :] linear_terms=self.linear_terms, infection_terms=self.infection_terms
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsds_int(((PyObject *)__pyx_v_self->linear_terms), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 5287, __pyx_L1_error)
  __pyx_v_linear_terms = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsds_int(((PyObject *)__pyx_v_self->infection_terms), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 5287, __pyx_L1_error)
  __pyx_v_infection_terms = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
+5288:             int [:, :] finres_terms=self.finres_terms
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dsds_int(((PyObject *)__pyx_v_self->finres_terms), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 5288, __pyx_L1_error)
  __pyx_v_finres_terms = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
+5289:             np.ndarray resource_list=self.resource_list
  __pyx_t_5 = ((PyObject *)__pyx_v_self->resource_list);
  __Pyx_INCREF(__pyx_t_5);
  __pyx_v_resource_list = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
+5290:             np.ndarray finres_pop = self.finres_pop
  __pyx_t_5 = ((PyObject *)__pyx_v_self->finres_pop);
  __Pyx_INCREF(__pyx_t_5);
  __pyx_v_finres_pop = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
 5291:             double frp
 5292:             double [:] s, reagent, rate, overdispersion
+5293:             double Omega=self.Omega
  __pyx_t_6 = __pyx_v_self->__pyx_base.Omega;
  __pyx_v_Omega = __pyx_t_6;
 5294: 
 5295: 
+5296:         if self.constant_terms.size > 0:
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->constant_terms), __pyx_n_s_size); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5296, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 5296, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__pyx_t_8) {
/* … */
  }
+5297:             for i in range(constant_terms.shape[0]):
    __pyx_t_1 = (__pyx_v_constant_terms.shape[0]);
    __pyx_t_9 = __pyx_t_1;
    for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
      __pyx_v_i = __pyx_t_10;
+5298:                 rate_index = constant_terms[i, 0]
      __pyx_t_11 = __pyx_v_i;
      __pyx_t_12 = 0;
      __pyx_v_rate_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_constant_terms.data + __pyx_t_11 * __pyx_v_constant_terms.strides[0]) ) + __pyx_t_12 * __pyx_v_constant_terms.strides[1]) )));
+5299:                 class_index = constant_terms[i, 1]
      __pyx_t_12 = __pyx_v_i;
      __pyx_t_11 = 1;
      __pyx_v_class_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_constant_terms.data + __pyx_t_12 * __pyx_v_constant_terms.strides[0]) ) + __pyx_t_11 * __pyx_v_constant_terms.strides[1]) )));
+5300:                 overdispersion_index = constant_terms[i, 3]
      __pyx_t_11 = __pyx_v_i;
      __pyx_t_12 = 3;
      __pyx_v_overdispersion_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_constant_terms.data + __pyx_t_11 * __pyx_v_constant_terms.strides[0]) ) + __pyx_t_12 * __pyx_v_constant_terms.strides[1]) )));
+5301:                 rate = parameters[rate_index]
      __pyx_t_13.data = __pyx_v_parameters.data;
      __pyx_t_13.memview = __pyx_v_parameters.memview;
      __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
      {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_rate_index;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_parameters.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_parameters.shape[1];
__pyx_t_13.strides[0] = __pyx_v_parameters.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_v_rate, 1);
      __pyx_v_rate = __pyx_t_13;
      __pyx_t_13.memview = NULL;
      __pyx_t_13.data = NULL;
+5302:                 if overdispersion_index == -1:
      __pyx_t_8 = ((__pyx_v_overdispersion_index == -1L) != 0);
      if (__pyx_t_8) {
/* … */
        goto __pyx_L6;
      }
+5303:                     overdispersion = np.ones(M)
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5303, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ones); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5303, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_M); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5303, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_15 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
          __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_14);
          if (likely(__pyx_t_15)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
            __Pyx_INCREF(__pyx_t_15);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_14, function);
          }
        }
        __pyx_t_7 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_15, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_5);
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5303, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 5303, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __PYX_XDEC_MEMVIEW(&__pyx_v_overdispersion, 1);
        __pyx_v_overdispersion = __pyx_t_13;
        __pyx_t_13.memview = NULL;
        __pyx_t_13.data = NULL;
 5304:                 else:
+5305:                     overdispersion = parameters[overdispersion_index]
      /*else*/ {
        __pyx_t_13.data = __pyx_v_parameters.data;
        __pyx_t_13.memview = __pyx_v_parameters.memview;
        __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
        {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_overdispersion_index;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_parameters.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_parameters.shape[1];
__pyx_t_13.strides[0] = __pyx_v_parameters.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_v_overdispersion, 1);
        __pyx_v_overdispersion = __pyx_t_13;
        __pyx_t_13.memview = NULL;
        __pyx_t_13.data = NULL;
      }
      __pyx_L6:;
+5306:                 for m in range(M):
      __pyx_t_16 = __pyx_v_M;
      __pyx_t_17 = __pyx_t_16;
      for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
        __pyx_v_m = __pyx_t_18;
+5307:                     B[class_index, m, class_index, m] += rate[m]*overdispersion[m]/Omega
        __pyx_t_12 = __pyx_v_m;
        __pyx_t_11 = __pyx_v_m;
        __pyx_t_19 = __pyx_v_class_index;
        __pyx_t_20 = __pyx_v_m;
        __pyx_t_21 = __pyx_v_class_index;
        __pyx_t_22 = __pyx_v_m;
        *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_19 * __pyx_v_B.strides[0]) ) + __pyx_t_20 * __pyx_v_B.strides[1]) ) + __pyx_t_21 * __pyx_v_B.strides[2]) ) + __pyx_t_22 * __pyx_v_B.strides[3]) )) += (((*((double *) ( /* dim=0 */ (__pyx_v_rate.data + __pyx_t_12 * __pyx_v_rate.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_overdispersion.data + __pyx_t_11 * __pyx_v_overdispersion.strides[0]) )))) / __pyx_v_Omega);
+5308:                     B[nClass-1, m, nClass-1, m] += rate[m]*overdispersion[m]/Omega
        __pyx_t_11 = __pyx_v_m;
        __pyx_t_12 = __pyx_v_m;
        __pyx_t_22 = (__pyx_v_nClass - 1);
        __pyx_t_21 = __pyx_v_m;
        __pyx_t_20 = (__pyx_v_nClass - 1);
        __pyx_t_19 = __pyx_v_m;
        *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_22 * __pyx_v_B.strides[0]) ) + __pyx_t_21 * __pyx_v_B.strides[1]) ) + __pyx_t_20 * __pyx_v_B.strides[2]) ) + __pyx_t_19 * __pyx_v_B.strides[3]) )) += (((*((double *) ( /* dim=0 */ (__pyx_v_rate.data + __pyx_t_11 * __pyx_v_rate.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_overdispersion.data + __pyx_t_12 * __pyx_v_overdispersion.strides[0]) )))) / __pyx_v_Omega);
      }
    }
 5309: 
+5310:         for i in range(infection_terms.shape[0]):
  __pyx_t_1 = (__pyx_v_infection_terms.shape[0]);
  __pyx_t_9 = __pyx_t_1;
  for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
    __pyx_v_i = __pyx_t_10;
 5311: 
 5312: 
+5313:             rate_index = infection_terms[i, 0]
    __pyx_t_12 = __pyx_v_i;
    __pyx_t_11 = 0;
    __pyx_v_rate_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_infection_terms.data + __pyx_t_12 * __pyx_v_infection_terms.strides[0]) ) + __pyx_t_11 * __pyx_v_infection_terms.strides[1]) )));
+5314:             infective_index = infection_terms[i, 1]
    __pyx_t_11 = __pyx_v_i;
    __pyx_t_12 = 1;
    __pyx_v_infective_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_infection_terms.data + __pyx_t_11 * __pyx_v_infection_terms.strides[0]) ) + __pyx_t_12 * __pyx_v_infection_terms.strides[1]) )));
+5315:             susceptible_index = infection_terms[i, 2]
    __pyx_t_12 = __pyx_v_i;
    __pyx_t_11 = 2;
    __pyx_v_susceptible_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_infection_terms.data + __pyx_t_12 * __pyx_v_infection_terms.strides[0]) ) + __pyx_t_11 * __pyx_v_infection_terms.strides[1]) )));
+5316:             product_index = infection_terms[i, 3]
    __pyx_t_11 = __pyx_v_i;
    __pyx_t_12 = 3;
    __pyx_v_product_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_infection_terms.data + __pyx_t_11 * __pyx_v_infection_terms.strides[0]) ) + __pyx_t_12 * __pyx_v_infection_terms.strides[1]) )));
+5317:             overdispersion_index = infection_terms[i, 4]
    __pyx_t_12 = __pyx_v_i;
    __pyx_t_11 = 4;
    __pyx_v_overdispersion_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_infection_terms.data + __pyx_t_12 * __pyx_v_infection_terms.strides[0]) ) + __pyx_t_11 * __pyx_v_infection_terms.strides[1]) )));
+5318:             rate = parameters[rate_index]
    __pyx_t_13.data = __pyx_v_parameters.data;
    __pyx_t_13.memview = __pyx_v_parameters.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
    {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_rate_index;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_parameters.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_parameters.shape[1];
__pyx_t_13.strides[0] = __pyx_v_parameters.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_v_rate, 1);
    __pyx_v_rate = __pyx_t_13;
    __pyx_t_13.memview = NULL;
    __pyx_t_13.data = NULL;
+5319:             s = x[susceptible_index*M:(susceptible_index+1)*M]
    __pyx_t_13.data = __pyx_v_x.data;
    __pyx_t_13.memview = __pyx_v_x.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
    __pyx_t_23 = -1;
    if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_13,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_23,
    (__pyx_v_susceptible_index * __pyx_v_M),
    ((__pyx_v_susceptible_index + 1) * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 5319, __pyx_L1_error)
}

__PYX_XDEC_MEMVIEW(&__pyx_v_s, 1);
    __pyx_v_s = __pyx_t_13;
    __pyx_t_13.memview = NULL;
    __pyx_t_13.data = NULL;
+5320:             if overdispersion_index == -1:
    __pyx_t_8 = ((__pyx_v_overdispersion_index == -1L) != 0);
    if (__pyx_t_8) {
/* … */
      goto __pyx_L11;
    }
+5321:                 overdispersion = np.ones(M)
      __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5321, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_ones); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5321, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_t_14 = PyInt_FromSsize_t(__pyx_v_M); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5321, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __pyx_t_15 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_15)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_15);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_7 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_15, __pyx_t_14) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_14);
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5321, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 5321, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __PYX_XDEC_MEMVIEW(&__pyx_v_overdispersion, 1);
      __pyx_v_overdispersion = __pyx_t_13;
      __pyx_t_13.memview = NULL;
      __pyx_t_13.data = NULL;
 5322:             else:
+5323:                 overdispersion = parameters[overdispersion_index]
    /*else*/ {
      __pyx_t_13.data = __pyx_v_parameters.data;
      __pyx_t_13.memview = __pyx_v_parameters.memview;
      __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
      {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_overdispersion_index;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_parameters.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_parameters.shape[1];
__pyx_t_13.strides[0] = __pyx_v_parameters.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_v_overdispersion, 1);
      __pyx_v_overdispersion = __pyx_t_13;
      __pyx_t_13.memview = NULL;
      __pyx_t_13.data = NULL;
    }
    __pyx_L11:;
+5324:             for m in range(M):
    __pyx_t_16 = __pyx_v_M;
    __pyx_t_17 = __pyx_t_16;
    for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
      __pyx_v_m = __pyx_t_18;
+5325:                 B[susceptible_index, m, susceptible_index, m] += rate[m]*overdispersion[m]*l[i, m]*s[m]
      __pyx_t_11 = __pyx_v_m;
      __pyx_t_12 = __pyx_v_m;
      __pyx_t_19 = __pyx_v_i;
      __pyx_t_20 = __pyx_v_m;
      __pyx_t_21 = __pyx_v_m;
      __pyx_t_22 = __pyx_v_susceptible_index;
      __pyx_t_24 = __pyx_v_m;
      __pyx_t_25 = __pyx_v_susceptible_index;
      __pyx_t_26 = __pyx_v_m;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_22 * __pyx_v_B.strides[0]) ) + __pyx_t_24 * __pyx_v_B.strides[1]) ) + __pyx_t_25 * __pyx_v_B.strides[2]) ) + __pyx_t_26 * __pyx_v_B.strides[3]) )) += ((((*((double *) ( /* dim=0 */ (__pyx_v_rate.data + __pyx_t_11 * __pyx_v_rate.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_overdispersion.data + __pyx_t_12 * __pyx_v_overdispersion.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_l.data + __pyx_t_19 * __pyx_v_l.strides[0]) ) + __pyx_t_20 * __pyx_v_l.strides[1]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_21 * __pyx_v_s.strides[0]) ))));
+5326:                 if product_index>-1:
      __pyx_t_8 = ((__pyx_v_product_index > -1L) != 0);
      if (__pyx_t_8) {
/* … */
      }
    }
  }
+5327:                     B[susceptible_index, m, product_index, m] -=  rate[m]*overdispersion[m]*l[i, m]*s[m]
        __pyx_t_21 = __pyx_v_m;
        __pyx_t_20 = __pyx_v_m;
        __pyx_t_19 = __pyx_v_i;
        __pyx_t_12 = __pyx_v_m;
        __pyx_t_11 = __pyx_v_m;
        __pyx_t_26 = __pyx_v_susceptible_index;
        __pyx_t_25 = __pyx_v_m;
        __pyx_t_24 = __pyx_v_product_index;
        __pyx_t_22 = __pyx_v_m;
        *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_26 * __pyx_v_B.strides[0]) ) + __pyx_t_25 * __pyx_v_B.strides[1]) ) + __pyx_t_24 * __pyx_v_B.strides[2]) ) + __pyx_t_22 * __pyx_v_B.strides[3]) )) -= ((((*((double *) ( /* dim=0 */ (__pyx_v_rate.data + __pyx_t_21 * __pyx_v_rate.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_overdispersion.data + __pyx_t_20 * __pyx_v_overdispersion.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_l.data + __pyx_t_19 * __pyx_v_l.strides[0]) ) + __pyx_t_12 * __pyx_v_l.strides[1]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_11 * __pyx_v_s.strides[0]) ))));
+5328:                     B[product_index, m, product_index, m] += rate[m]*overdispersion[m]*l[i, m]*s[m]
        __pyx_t_11 = __pyx_v_m;
        __pyx_t_12 = __pyx_v_m;
        __pyx_t_19 = __pyx_v_i;
        __pyx_t_20 = __pyx_v_m;
        __pyx_t_21 = __pyx_v_m;
        __pyx_t_22 = __pyx_v_product_index;
        __pyx_t_24 = __pyx_v_m;
        __pyx_t_25 = __pyx_v_product_index;
        __pyx_t_26 = __pyx_v_m;
        *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_22 * __pyx_v_B.strides[0]) ) + __pyx_t_24 * __pyx_v_B.strides[1]) ) + __pyx_t_25 * __pyx_v_B.strides[2]) ) + __pyx_t_26 * __pyx_v_B.strides[3]) )) += ((((*((double *) ( /* dim=0 */ (__pyx_v_rate.data + __pyx_t_11 * __pyx_v_rate.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_overdispersion.data + __pyx_t_12 * __pyx_v_overdispersion.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_l.data + __pyx_t_19 * __pyx_v_l.strides[0]) ) + __pyx_t_20 * __pyx_v_l.strides[1]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_21 * __pyx_v_s.strides[0]) ))));
+5329:                     B[product_index, m, susceptible_index, m] -= rate[m]*overdispersion[m]*l[i, m]*s[m]
        __pyx_t_21 = __pyx_v_m;
        __pyx_t_20 = __pyx_v_m;
        __pyx_t_19 = __pyx_v_i;
        __pyx_t_12 = __pyx_v_m;
        __pyx_t_11 = __pyx_v_m;
        __pyx_t_26 = __pyx_v_product_index;
        __pyx_t_25 = __pyx_v_m;
        __pyx_t_24 = __pyx_v_susceptible_index;
        __pyx_t_22 = __pyx_v_m;
        *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_26 * __pyx_v_B.strides[0]) ) + __pyx_t_25 * __pyx_v_B.strides[1]) ) + __pyx_t_24 * __pyx_v_B.strides[2]) ) + __pyx_t_22 * __pyx_v_B.strides[3]) )) -= ((((*((double *) ( /* dim=0 */ (__pyx_v_rate.data + __pyx_t_21 * __pyx_v_rate.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_overdispersion.data + __pyx_t_20 * __pyx_v_overdispersion.strides[0]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_l.data + __pyx_t_19 * __pyx_v_l.strides[0]) ) + __pyx_t_12 * __pyx_v_l.strides[1]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_s.data + __pyx_t_11 * __pyx_v_s.strides[0]) ))));
 5330: 
+5331:         for i in range(linear_terms.shape[0]):
  __pyx_t_1 = (__pyx_v_linear_terms.shape[0]);
  __pyx_t_9 = __pyx_t_1;
  for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
    __pyx_v_i = __pyx_t_10;
+5332:             product_index = linear_terms[i, 2]
    __pyx_t_11 = __pyx_v_i;
    __pyx_t_12 = 2;
    __pyx_v_product_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_linear_terms.data + __pyx_t_11 * __pyx_v_linear_terms.strides[0]) ) + __pyx_t_12 * __pyx_v_linear_terms.strides[1]) )));
+5333:             reagent_index = linear_terms[i, 1]
    __pyx_t_12 = __pyx_v_i;
    __pyx_t_11 = 1;
    __pyx_v_reagent_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_linear_terms.data + __pyx_t_12 * __pyx_v_linear_terms.strides[0]) ) + __pyx_t_11 * __pyx_v_linear_terms.strides[1]) )));
+5334:             overdispersion_index = linear_terms[i, 3]
    __pyx_t_11 = __pyx_v_i;
    __pyx_t_12 = 3;
    __pyx_v_overdispersion_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_linear_terms.data + __pyx_t_11 * __pyx_v_linear_terms.strides[0]) ) + __pyx_t_12 * __pyx_v_linear_terms.strides[1]) )));
+5335:             reagent = x[reagent_index*M:(reagent_index+1)*M]
    __pyx_t_13.data = __pyx_v_x.data;
    __pyx_t_13.memview = __pyx_v_x.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
    __pyx_t_23 = -1;
    if (unlikely(__pyx_memoryview_slice_memviewslice(
    &__pyx_t_13,
    __pyx_v_x.shape[0], __pyx_v_x.strides[0], __pyx_v_x.suboffsets[0],
    0,
    0,
    &__pyx_t_23,
    (__pyx_v_reagent_index * __pyx_v_M),
    ((__pyx_v_reagent_index + 1) * __pyx_v_M),
    0,
    1,
    1,
    0,
    1) < 0))
{
    __PYX_ERR(0, 5335, __pyx_L1_error)
}

__PYX_XDEC_MEMVIEW(&__pyx_v_reagent, 1);
    __pyx_v_reagent = __pyx_t_13;
    __pyx_t_13.memview = NULL;
    __pyx_t_13.data = NULL;
+5336:             rate_index = linear_terms[i, 0]
    __pyx_t_12 = __pyx_v_i;
    __pyx_t_11 = 0;
    __pyx_v_rate_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_linear_terms.data + __pyx_t_12 * __pyx_v_linear_terms.strides[0]) ) + __pyx_t_11 * __pyx_v_linear_terms.strides[1]) )));
+5337:             rate = parameters[rate_index]
    __pyx_t_13.data = __pyx_v_parameters.data;
    __pyx_t_13.memview = __pyx_v_parameters.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
    {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_rate_index;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_parameters.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_parameters.shape[1];
__pyx_t_13.strides[0] = __pyx_v_parameters.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_v_rate, 1);
    __pyx_v_rate = __pyx_t_13;
    __pyx_t_13.memview = NULL;
    __pyx_t_13.data = NULL;
+5338:             if overdispersion_index == -1:
    __pyx_t_8 = ((__pyx_v_overdispersion_index == -1L) != 0);
    if (__pyx_t_8) {
/* … */
      goto __pyx_L17;
    }
+5339:                 overdispersion = np.ones(M)
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ones); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_M); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_15 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
        __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_14);
        if (likely(__pyx_t_15)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
          __Pyx_INCREF(__pyx_t_15);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_14, function);
        }
      }
      __pyx_t_7 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_15, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_5);
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 5339, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __PYX_XDEC_MEMVIEW(&__pyx_v_overdispersion, 1);
      __pyx_v_overdispersion = __pyx_t_13;
      __pyx_t_13.memview = NULL;
      __pyx_t_13.data = NULL;
 5340:             else:
+5341:                 overdispersion = parameters[overdispersion_index]
    /*else*/ {
      __pyx_t_13.data = __pyx_v_parameters.data;
      __pyx_t_13.memview = __pyx_v_parameters.memview;
      __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
      {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_overdispersion_index;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_parameters.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_parameters.shape[1];
__pyx_t_13.strides[0] = __pyx_v_parameters.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_v_overdispersion, 1);
      __pyx_v_overdispersion = __pyx_t_13;
      __pyx_t_13.memview = NULL;
      __pyx_t_13.data = NULL;
    }
    __pyx_L17:;
+5342:             for m in range(M): # only fill in the upper triangular form
    __pyx_t_16 = __pyx_v_M;
    __pyx_t_17 = __pyx_t_16;
    for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
      __pyx_v_m = __pyx_t_18;
+5343:                 B[reagent_index, m, reagent_index, m] += rate[m]*overdispersion[m]*reagent[m]
      __pyx_t_11 = __pyx_v_m;
      __pyx_t_12 = __pyx_v_m;
      __pyx_t_19 = __pyx_v_m;
      __pyx_t_20 = __pyx_v_reagent_index;
      __pyx_t_21 = __pyx_v_m;
      __pyx_t_22 = __pyx_v_reagent_index;
      __pyx_t_24 = __pyx_v_m;
      *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_20 * __pyx_v_B.strides[0]) ) + __pyx_t_21 * __pyx_v_B.strides[1]) ) + __pyx_t_22 * __pyx_v_B.strides[2]) ) + __pyx_t_24 * __pyx_v_B.strides[3]) )) += (((*((double *) ( /* dim=0 */ (__pyx_v_rate.data + __pyx_t_11 * __pyx_v_rate.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_overdispersion.data + __pyx_t_12 * __pyx_v_overdispersion.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_reagent.data + __pyx_t_19 * __pyx_v_reagent.strides[0]) ))));
+5344:                 if product_index>-1:
      __pyx_t_8 = ((__pyx_v_product_index > -1L) != 0);
      if (__pyx_t_8) {
/* … */
      }
    }
  }
+5345:                     B[product_index, m, product_index, m] += rate[m]*overdispersion[m]*reagent[m]
        __pyx_t_19 = __pyx_v_m;
        __pyx_t_12 = __pyx_v_m;
        __pyx_t_11 = __pyx_v_m;
        __pyx_t_24 = __pyx_v_product_index;
        __pyx_t_22 = __pyx_v_m;
        __pyx_t_21 = __pyx_v_product_index;
        __pyx_t_20 = __pyx_v_m;
        *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_24 * __pyx_v_B.strides[0]) ) + __pyx_t_22 * __pyx_v_B.strides[1]) ) + __pyx_t_21 * __pyx_v_B.strides[2]) ) + __pyx_t_20 * __pyx_v_B.strides[3]) )) += (((*((double *) ( /* dim=0 */ (__pyx_v_rate.data + __pyx_t_19 * __pyx_v_rate.strides[0]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_overdispersion.data + __pyx_t_12 * __pyx_v_overdispersion.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_reagent.data + __pyx_t_11 * __pyx_v_reagent.strides[0]) ))));
+5346:                     B[reagent_index, m, product_index, m] += -rate[m]*overdispersion[m]*reagent[m]
        __pyx_t_11 = __pyx_v_m;
        __pyx_t_12 = __pyx_v_m;
        __pyx_t_19 = __pyx_v_m;
        __pyx_t_20 = __pyx_v_reagent_index;
        __pyx_t_21 = __pyx_v_m;
        __pyx_t_22 = __pyx_v_product_index;
        __pyx_t_24 = __pyx_v_m;
        *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_20 * __pyx_v_B.strides[0]) ) + __pyx_t_21 * __pyx_v_B.strides[1]) ) + __pyx_t_22 * __pyx_v_B.strides[2]) ) + __pyx_t_24 * __pyx_v_B.strides[3]) )) += (((-(*((double *) ( /* dim=0 */ (__pyx_v_rate.data + __pyx_t_11 * __pyx_v_rate.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_overdispersion.data + __pyx_t_12 * __pyx_v_overdispersion.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_reagent.data + __pyx_t_19 * __pyx_v_reagent.strides[0]) ))));
+5347:                     B[product_index, m, reagent_index, m] += -rate[m]*overdispersion[m]*reagent[m]
        __pyx_t_19 = __pyx_v_m;
        __pyx_t_12 = __pyx_v_m;
        __pyx_t_11 = __pyx_v_m;
        __pyx_t_24 = __pyx_v_product_index;
        __pyx_t_22 = __pyx_v_m;
        __pyx_t_21 = __pyx_v_reagent_index;
        __pyx_t_20 = __pyx_v_m;
        *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_24 * __pyx_v_B.strides[0]) ) + __pyx_t_22 * __pyx_v_B.strides[1]) ) + __pyx_t_21 * __pyx_v_B.strides[2]) ) + __pyx_t_20 * __pyx_v_B.strides[3]) )) += (((-(*((double *) ( /* dim=0 */ (__pyx_v_rate.data + __pyx_t_19 * __pyx_v_rate.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_overdispersion.data + __pyx_t_12 * __pyx_v_overdispersion.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_reagent.data + __pyx_t_11 * __pyx_v_reagent.strides[0]) ))));
 5348: 
+5349:         if finres_terms.size > 0:
  __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_v_finres_terms, 2, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_size); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyObject_RichCompare(__pyx_t_14, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5349, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 5349, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__pyx_t_8) {
/* … */
  }
+5350:             for i in range(finres_terms.shape[0]):
    __pyx_t_1 = (__pyx_v_finres_terms.shape[0]);
    __pyx_t_9 = __pyx_t_1;
    for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
      __pyx_v_i = __pyx_t_10;
+5351:                 resource_index = finres_terms[i, 0]
      __pyx_t_11 = __pyx_v_i;
      __pyx_t_12 = 0;
      __pyx_v_resource_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_finres_terms.data + __pyx_t_11 * __pyx_v_finres_terms.strides[0]) ) + __pyx_t_12 * __pyx_v_finres_terms.strides[1]) )));
+5352:                 rate_index = resource_list[resource_index][0]
      __pyx_t_7 = __Pyx_GetItemInt(((PyObject *)__pyx_v_resource_list), __pyx_v_resource_index, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5352, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_14 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5352, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_16 = __Pyx_PyIndex_AsSsize_t(__pyx_t_14); if (unlikely((__pyx_t_16 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 5352, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_v_rate_index = __pyx_t_16;
+5353:                 priority_index = finres_terms[i, 1]
      __pyx_t_12 = __pyx_v_i;
      __pyx_t_11 = 1;
      __pyx_v_priority_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_finres_terms.data + __pyx_t_12 * __pyx_v_finres_terms.strides[0]) ) + __pyx_t_11 * __pyx_v_finres_terms.strides[1]) )));
+5354:                 probability_index = finres_terms[i, 2]
      __pyx_t_11 = __pyx_v_i;
      __pyx_t_12 = 2;
      __pyx_v_probability_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_finres_terms.data + __pyx_t_11 * __pyx_v_finres_terms.strides[0]) ) + __pyx_t_12 * __pyx_v_finres_terms.strides[1]) )));
+5355:                 class_index = finres_terms[i, 3]
      __pyx_t_12 = __pyx_v_i;
      __pyx_t_11 = 3;
      __pyx_v_class_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_finres_terms.data + __pyx_t_12 * __pyx_v_finres_terms.strides[0]) ) + __pyx_t_11 * __pyx_v_finres_terms.strides[1]) )));
+5356:                 reagent_index = finres_terms[i, 4]
      __pyx_t_11 = __pyx_v_i;
      __pyx_t_12 = 4;
      __pyx_v_reagent_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_finres_terms.data + __pyx_t_11 * __pyx_v_finres_terms.strides[0]) ) + __pyx_t_12 * __pyx_v_finres_terms.strides[1]) )));
+5357:                 product_index = finres_terms[i, 5]
      __pyx_t_12 = __pyx_v_i;
      __pyx_t_11 = 5;
      __pyx_v_product_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_finres_terms.data + __pyx_t_12 * __pyx_v_finres_terms.strides[0]) ) + __pyx_t_11 * __pyx_v_finres_terms.strides[1]) )));
+5358:                 overdispersion_index = finres_terms[i, 6]
      __pyx_t_11 = __pyx_v_i;
      __pyx_t_12 = 6;
      __pyx_v_overdispersion_index = (*((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_finres_terms.data + __pyx_t_11 * __pyx_v_finres_terms.strides[0]) ) + __pyx_t_12 * __pyx_v_finres_terms.strides[1]) )));
+5359:                 if overdispersion_index == -1:
      __pyx_t_8 = ((__pyx_v_overdispersion_index == -1L) != 0);
      if (__pyx_t_8) {
/* … */
        goto __pyx_L24;
      }
+5360:                     overdispersion = np.ones(M)
        __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5360, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_ones); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5360, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_M); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5360, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_15 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
          __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_5);
          if (likely(__pyx_t_15)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
            __Pyx_INCREF(__pyx_t_15);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_5, function);
          }
        }
        __pyx_t_14 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_15, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_7);
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5360, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_14, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 5360, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __PYX_XDEC_MEMVIEW(&__pyx_v_overdispersion, 1);
        __pyx_v_overdispersion = __pyx_t_13;
        __pyx_t_13.memview = NULL;
        __pyx_t_13.data = NULL;
 5361:                 else:
+5362:                     overdispersion = parameters[overdispersion_index]
      /*else*/ {
        __pyx_t_13.data = __pyx_v_parameters.data;
        __pyx_t_13.memview = __pyx_v_parameters.memview;
        __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
        {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_overdispersion_index;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_parameters.strides[0];
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_parameters.shape[1];
__pyx_t_13.strides[0] = __pyx_v_parameters.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__PYX_XDEC_MEMVIEW(&__pyx_v_overdispersion, 1);
        __pyx_v_overdispersion = __pyx_t_13;
        __pyx_t_13.memview = NULL;
        __pyx_t_13.data = NULL;
      }
      __pyx_L24:;
+5363:                 for m in range(M):
      __pyx_t_16 = __pyx_v_M;
      __pyx_t_17 = __pyx_t_16;
      for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
        __pyx_v_m = __pyx_t_18;
+5364:                     if np.size(finres_pop[resource_index]) == 1:
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5364, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5364, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_GetItemInt(((PyObject *)__pyx_v_finres_pop), __pyx_v_resource_index, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5364, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_15 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_15)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_15);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
          }
        }
        __pyx_t_14 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_15, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_5);
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5364, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyInt_EqObjC(__pyx_t_14, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5364, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 5364, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (__pyx_t_8) {
/* … */
          goto __pyx_L27;
        }
+5365:                         frp = finres_pop[resource_index]
          __pyx_t_7 = __Pyx_GetItemInt(((PyObject *)__pyx_v_finres_pop), __pyx_v_resource_index, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5365, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5365, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_v_frp = __pyx_t_6;
 5366:                     else:
+5367:                         frp = finres_pop[resource_index][m]
        /*else*/ {
          __pyx_t_7 = __Pyx_GetItemInt(((PyObject *)__pyx_v_finres_pop), __pyx_v_resource_index, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5367, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_14 = __Pyx_GetItemInt(__pyx_t_7, __pyx_v_m, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5367, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_14); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5367, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __pyx_v_frp = __pyx_t_6;
        }
        __pyx_L27:;
+5368:                     term = parameters[rate_index, m] * parameters[priority_index, m] \
        __pyx_t_12 = __pyx_v_rate_index;
        __pyx_t_11 = __pyx_v_m;
        __pyx_t_19 = __pyx_v_priority_index;
        __pyx_t_20 = __pyx_v_m;
+5369:                            * parameters[probability_index, m] * overdispersion[m] * x[class_index*M+m] / (frp * self.Omega)
        __pyx_t_21 = __pyx_v_probability_index;
        __pyx_t_22 = __pyx_v_m;
        __pyx_t_24 = __pyx_v_m;
        __pyx_t_25 = ((__pyx_v_class_index * __pyx_v_M) + __pyx_v_m);
        __pyx_t_14 = PyFloat_FromDouble(((((((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_parameters.data + __pyx_t_12 * __pyx_v_parameters.strides[0]) ) + __pyx_t_11 * __pyx_v_parameters.strides[1]) ))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_parameters.data + __pyx_t_19 * __pyx_v_parameters.strides[0]) ) + __pyx_t_20 * __pyx_v_parameters.strides[1]) )))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_parameters.data + __pyx_t_21 * __pyx_v_parameters.strides[0]) ) + __pyx_t_22 * __pyx_v_parameters.strides[1]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_overdispersion.data + __pyx_t_24 * __pyx_v_overdispersion.strides[0]) )))) * (*((double *) ( /* dim=0 */ (__pyx_v_x.data + __pyx_t_25 * __pyx_v_x.strides[0]) )))) / (__pyx_v_frp * __pyx_v_self->__pyx_base.Omega))); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5369, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_XDECREF_SET(__pyx_v_term, __pyx_t_14);
        __pyx_t_14 = 0;
+5370:                     if reagent_index>-1:
        __pyx_t_8 = ((__pyx_v_reagent_index > -1L) != 0);
        if (__pyx_t_8) {
/* … */
        }
+5371:                         B[reagent_index, m, reagent_index, m] += term
          __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_term); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5371, __pyx_L1_error)
          __pyx_t_25 = __pyx_v_reagent_index;
          __pyx_t_24 = __pyx_v_m;
          __pyx_t_22 = __pyx_v_reagent_index;
          __pyx_t_21 = __pyx_v_m;
          *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_25 * __pyx_v_B.strides[0]) ) + __pyx_t_24 * __pyx_v_B.strides[1]) ) + __pyx_t_22 * __pyx_v_B.strides[2]) ) + __pyx_t_21 * __pyx_v_B.strides[3]) )) += __pyx_t_6;
+5372:                         if product_index>-1:
          __pyx_t_8 = ((__pyx_v_product_index > -1L) != 0);
          if (__pyx_t_8) {
/* … */
          }
+5373:                             B[reagent_index, m, product_index, m] -= term
            __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_term); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5373, __pyx_L1_error)
            __pyx_t_21 = __pyx_v_reagent_index;
            __pyx_t_22 = __pyx_v_m;
            __pyx_t_24 = __pyx_v_product_index;
            __pyx_t_25 = __pyx_v_m;
            *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_21 * __pyx_v_B.strides[0]) ) + __pyx_t_22 * __pyx_v_B.strides[1]) ) + __pyx_t_24 * __pyx_v_B.strides[2]) ) + __pyx_t_25 * __pyx_v_B.strides[3]) )) -= __pyx_t_6;
+5374:                             B[product_index, m, reagent_index, m] -= term
            __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_term); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5374, __pyx_L1_error)
            __pyx_t_25 = __pyx_v_product_index;
            __pyx_t_24 = __pyx_v_m;
            __pyx_t_22 = __pyx_v_reagent_index;
            __pyx_t_21 = __pyx_v_m;
            *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_25 * __pyx_v_B.strides[0]) ) + __pyx_t_24 * __pyx_v_B.strides[1]) ) + __pyx_t_22 * __pyx_v_B.strides[2]) ) + __pyx_t_21 * __pyx_v_B.strides[3]) )) -= __pyx_t_6;
+5375:                     if product_index>-1:
        __pyx_t_8 = ((__pyx_v_product_index > -1L) != 0);
        if (__pyx_t_8) {
/* … */
        }
      }
    }
+5376:                         B[product_index, m, product_index, m] += term
          __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_term); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5376, __pyx_L1_error)
          __pyx_t_21 = __pyx_v_product_index;
          __pyx_t_22 = __pyx_v_m;
          __pyx_t_24 = __pyx_v_product_index;
          __pyx_t_25 = __pyx_v_m;
          *((double *) ( /* dim=3 */ (( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B.data + __pyx_t_21 * __pyx_v_B.strides[0]) ) + __pyx_t_22 * __pyx_v_B.strides[1]) ) + __pyx_t_24 * __pyx_v_B.strides[2]) ) + __pyx_t_25 * __pyx_v_B.strides[3]) )) += __pyx_t_6;
 5377: 
+5378:         self.B_vec = self.B.reshape((self.dim, self.dim))[(self.rows, self.cols)]
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.B), __pyx_n_s_reshape); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.dim); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_self->__pyx_base.dim); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_27 = PyTuple_New(2); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_27);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_27, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_15);
  PyTuple_SET_ITEM(__pyx_t_27, 1, __pyx_t_15);
  __pyx_t_5 = 0;
  __pyx_t_15 = 0;
  __pyx_t_15 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_15)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_15);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
    }
  }
  __pyx_t_14 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_15, __pyx_t_27) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_27);
  __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
  if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->__pyx_base.rows));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->__pyx_base.rows));
  PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_v_self->__pyx_base.rows));
  __Pyx_INCREF(((PyObject *)__pyx_v_self->__pyx_base.cols));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->__pyx_base.cols));
  PyTuple_SET_ITEM(__pyx_t_7, 1, ((PyObject *)__pyx_v_self->__pyx_base.cols));
  __pyx_t_27 = __Pyx_PyObject_GetItem(__pyx_t_14, __pyx_t_7); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 5378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_27);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (!(likely(((__pyx_t_27) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_27, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5378, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_27);
  __Pyx_GOTREF(__pyx_v_self->__pyx_base.B_vec);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_base.B_vec));
  __pyx_v_self->__pyx_base.B_vec = ((PyArrayObject *)__pyx_t_27);
  __pyx_t_27 = 0;
 5379: 
 5380: 
+5381: cdef class Spp(Model):
struct __pyx_obj_6pyross_9inference_Spp {
  struct __pyx_obj_6pyross_9inference_Model __pyx_base;
};
/* … */
struct __pyx_vtabstruct_6pyross_9inference_Spp {
  struct __pyx_vtabstruct_6pyross_9inference_Model __pyx_base;
};
static struct __pyx_vtabstruct_6pyross_9inference_Spp *__pyx_vtabptr_6pyross_9inference_Spp;

 5382:     """
 5383:     This is a slightly more specific version of the class `Model`. 
 5384: 
 5385:     `Spp` is still supported for backward compatibility. 
 5386: 
 5387:     `Model` class is recommended over `Spp` for new users. 
 5388: 
 5389:     The `Spp` class works like `Model` but infection terms use a single class `S` 
 5390:     ...
 5391: 
 5392: 
 5393:     Parameters
 5394:     ----------
 5395:     model_spec: dict
 5396:         A dictionary specifying the model. See `Examples`.
 5397:     parameters: dict
 5398:         A dictionary containing the model parameters.
 5399:         All parameters can be float if not age-dependent, and np.array(M,) if age-dependent
 5400:     M: int
 5401:         Number of age groups.
 5402:     fi: np.array(M) or list
 5403:         Fraction of each age group.
 5404:     Omega: int
 5405:         Total population.
 5406:     steps: int, optional
 5407:         The number of internal integration steps performed between the observed points (not used in tangent space inference).
 5408:         For robustness, set steps to be large, lyapunov_method='LSODA'.
 5409:         For speed, set steps to be small (~4), lyapunov_method='euler'.
 5410:         For a combination of the two, choose something in between.
 5411:     det_method: str, optional
 5412:         The integration method used for deterministic integration.
 5413:         Choose one of 'LSODA' and 'RK45'. Default is 'LSODA'.
 5414:     lyapunov_method: str, optional
 5415:         The integration method used for the integration of the Lyapunov equation for the covariance.
 5416:         Choose one of 'LSODA', 'RK45', 'RK2' and 'euler'. Default is 'LSODA'.
 5417:     rtol_det: float, optional
 5418:         relative tolerance for the deterministic integrator (default 1e-3)
 5419:     rtol_lyapunov: float, optional
 5420:         relative tolerance for the Lyapunov-type integrator (default 1e-3)
 5421:     max_steps_det: int, optional
 5422:         Maximum number of integration steps (total) for the deterministic integrator. Default: unlimited (represented as 0)
 5423:         Parameters for which the integrator reaches max_steps_det are disregarded by the optimiser.
 5424:     max_steps_lyapunov: int, optional
 5425:         Maximum number of integration steps (total) for the Lyapunov-type integrator. Default: unlimited (represented as 0)
 5426:         Parameters for which the integrator reaches max_steps_lyapunov are disregarded by the optimiser.
 5427:     parameter_mapping: python function, optional
 5428:         A user-defined function that maps the dictionary the parameters used for inference to a dictionary of parameters used in model_spec. Default is an identical mapping.
 5429:     time_dep_param_mapping: python function, optional
 5430:         As parameter_mapping, but time-dependent. The user-defined function takes time as a second argument.
 5431: 
 5432:     See `SIR_type` for a table of all the methods
 5433: 
 5434:     Examples
 5435:     --------
 5436:     An example of model_spec and parameters for SIR class with a constant influx
 5437: 
 5438:     >>> model_spec = {
 5439:             "classes" : ["S", "I"],
 5440:             "S" : {
 5441:                 "constant"  : [ ["k"] ],
 5442:                 "infection" : [ ["I", "-beta"] ]
 5443:             },
 5444:             "I" : {
 5445:                 "linear"    : [ ["I", "-gamma"] ],
 5446:                 "infection" : [ ["I", "beta"] ]
 5447:             }
 5448:         }
 5449:     >>> parameters = {
 5450:             'beta': 0.1,
 5451:             'gamma': 0.1,
 5452:             'k': 1,
 5453:         }
 5454:     """
 5455: 
+5456:     def __init__(self, model_spec, parameters, M, fi, Omega=1, steps=4,
/* Python wrapper */
static int __pyx_pw_6pyross_9inference_3Spp_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6pyross_9inference_3Spp_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_model_spec = 0;
  PyObject *__pyx_v_parameters = 0;
  PyObject *__pyx_v_M = 0;
  PyObject *__pyx_v_fi = 0;
  PyObject *__pyx_v_Omega = 0;
  PyObject *__pyx_v_steps = 0;
  PyObject *__pyx_v_det_method = 0;
  PyObject *__pyx_v_lyapunov_method = 0;
  PyObject *__pyx_v_rtol_det = 0;
  PyObject *__pyx_v_rtol_lyapunov = 0;
  PyObject *__pyx_v_max_steps_det = 0;
  PyObject *__pyx_v_max_steps_lyapunov = 0;
  PyObject *__pyx_v_parameter_mapping = 0;
  PyObject *__pyx_v_time_dep_param_mapping = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_model_spec,&__pyx_n_s_parameters,&__pyx_n_s_M,&__pyx_n_s_fi,&__pyx_n_s_Omega,&__pyx_n_s_steps,&__pyx_n_s_det_method,&__pyx_n_s_lyapunov_method,&__pyx_n_s_rtol_det,&__pyx_n_s_rtol_lyapunov,&__pyx_n_s_max_steps_det,&__pyx_n_s_max_steps_lyapunov,&__pyx_n_s_parameter_mapping,&__pyx_n_s_time_dep_param_mapping,0};
    PyObject* values[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[4] = ((PyObject *)__pyx_int_1);
    values[5] = ((PyObject *)__pyx_int_4);
    values[6] = ((PyObject *)__pyx_n_u_LSODA);
    values[7] = ((PyObject *)__pyx_n_u_LSODA);
    values[8] = ((PyObject *)__pyx_float_1eneg_3);
    values[9] = ((PyObject *)__pyx_float_1eneg_3);
    values[10] = ((PyObject *)__pyx_int_0);
    values[11] = ((PyObject *)__pyx_int_0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6pyross_9inference_3Spp___init__(struct __pyx_obj_6pyross_9inference_Spp *__pyx_v_self, PyObject *__pyx_v_model_spec, PyObject *__pyx_v_parameters, PyObject *__pyx_v_M, PyObject *__pyx_v_fi, PyObject *__pyx_v_Omega, PyObject *__pyx_v_steps, PyObject *__pyx_v_det_method, PyObject *__pyx_v_lyapunov_method, PyObject *__pyx_v_rtol_det, PyObject *__pyx_v_rtol_lyapunov, PyObject *__pyx_v_max_steps_det, PyObject *__pyx_v_max_steps_lyapunov, PyObject *__pyx_v_parameter_mapping, PyObject *__pyx_v_time_dep_param_mapping) {
  PyObject *__pyx_v_Xpp_model_spec = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyross.inference.Spp.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_Xpp_model_spec);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5457:                                     det_method='LSODA', lyapunov_method='LSODA', rtol_det=1e-3, rtol_lyapunov=1e-3, max_steps_det=0, max_steps_lyapunov=0,
+5458:                                     parameter_mapping=None, time_dep_param_mapping=None):
    values[12] = ((PyObject *)Py_None);
    values[13] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_model_spec)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_parameters)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 4, 14, 1); __PYX_ERR(0, 5456, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 4, 14, 2); __PYX_ERR(0, 5456, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fi)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 4, 14, 3); __PYX_ERR(0, 5456, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Omega);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_steps);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_det_method);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lyapunov_method);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol_det);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol_lyapunov);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps_det);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps_lyapunov);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_parameter_mapping);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_time_dep_param_mapping);
          if (value) { values[13] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 5456, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_model_spec = values[0];
    __pyx_v_parameters = values[1];
    __pyx_v_M = values[2];
    __pyx_v_fi = values[3];
    __pyx_v_Omega = values[4];
    __pyx_v_steps = values[5];
    __pyx_v_det_method = values[6];
    __pyx_v_lyapunov_method = values[7];
    __pyx_v_rtol_det = values[8];
    __pyx_v_rtol_lyapunov = values[9];
    __pyx_v_max_steps_det = values[10];
    __pyx_v_max_steps_lyapunov = values[11];
    __pyx_v_parameter_mapping = values[12];
    __pyx_v_time_dep_param_mapping = values[13];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 4, 14, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5456, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.Spp.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_3Spp___init__(((struct __pyx_obj_6pyross_9inference_Spp *)__pyx_v_self), __pyx_v_model_spec, __pyx_v_parameters, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov, __pyx_v_parameter_mapping, __pyx_v_time_dep_param_mapping);
+5459:         Xpp_model_spec = pyross.utils.Spp2Xpp(model_spec)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Spp2Xpp); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_model_spec) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_model_spec);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_Xpp_model_spec = __pyx_t_1;
  __pyx_t_1 = 0;
+5460:         super().__init__(Xpp_model_spec, parameters, M, fi, Omega=Omega, steps=steps,
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6pyross_9inference_Spp));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6pyross_9inference_Spp));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_ptype_6pyross_9inference_Spp));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_self));
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_init); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_Xpp_model_spec);
  __Pyx_GIVEREF(__pyx_v_Xpp_model_spec);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_Xpp_model_spec);
  __Pyx_INCREF(__pyx_v_parameters);
  __Pyx_GIVEREF(__pyx_v_parameters);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_parameters);
  __Pyx_INCREF(__pyx_v_M);
  __Pyx_GIVEREF(__pyx_v_M);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_M);
  __Pyx_INCREF(__pyx_v_fi);
  __Pyx_GIVEREF(__pyx_v_fi);
  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_fi);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_Omega, __pyx_v_Omega) < 0) __PYX_ERR(0, 5460, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_steps, __pyx_v_steps) < 0) __PYX_ERR(0, 5460, __pyx_L1_error)
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+5461:                                     det_method=det_method, lyapunov_method=lyapunov_method, rtol_det=rtol_det, rtol_lyapunov=rtol_lyapunov, max_steps_det=max_steps_det,
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_det_method, __pyx_v_det_method) < 0) __PYX_ERR(0, 5460, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_lyapunov_method, __pyx_v_lyapunov_method) < 0) __PYX_ERR(0, 5460, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_rtol_det, __pyx_v_rtol_det) < 0) __PYX_ERR(0, 5460, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_rtol_lyapunov, __pyx_v_rtol_lyapunov) < 0) __PYX_ERR(0, 5460, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_max_steps_det, __pyx_v_max_steps_det) < 0) __PYX_ERR(0, 5460, __pyx_L1_error)
+5462:                                     max_steps_lyapunov=max_steps_lyapunov, parameter_mapping=parameter_mapping, time_dep_param_mapping=time_dep_param_mapping)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_max_steps_lyapunov, __pyx_v_max_steps_lyapunov) < 0) __PYX_ERR(0, 5460, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_parameter_mapping, __pyx_v_parameter_mapping) < 0) __PYX_ERR(0, 5460, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_time_dep_param_mapping, __pyx_v_time_dep_param_mapping) < 0) __PYX_ERR(0, 5460, __pyx_L1_error)
 5463: 
 5464: @cython.wraparound(False)
 5465: @cython.boundscheck(False)
 5466: @cython.cdivision(True)
 5467: @cython.nonecheck(False)
+5468: cdef class SppQ(Spp):
struct __pyx_obj_6pyross_9inference_SppQ {
  struct __pyx_obj_6pyross_9inference_Spp __pyx_base;
  PyObject *full_model_spec;
  PyObject *input_time_dep_param_mapping;
  PyObject *input_param_mapping;
  PyObject *testRate;
};
/* … */
struct __pyx_vtabstruct_6pyross_9inference_SppQ {
  struct __pyx_vtabstruct_6pyross_9inference_Spp __pyx_base;
  PyObject *(*full_time_dep_param_mapping)(struct __pyx_obj_6pyross_9inference_SppQ *, PyObject *, PyObject *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_6pyross_9inference_SppQ *__pyx_vtabptr_6pyross_9inference_SppQ;

 5469:     """User-defined epidemic model with quarantine stage.
 5470: 
 5471:     This is a slightly more specific version of the class `Model`. 
 5472: 
 5473:     `SppQ` is still supported for backward compatibility. 
 5474: 
 5475:     `Model` class is recommended over `SppQ` for new users. 
 5476: 
 5477:     To initialise the SppQ model,
 5478:     ...
 5479: 
 5480:     Parameters
 5481:     ----------
 5482:     model_spec: dict
 5483:         A dictionary specifying the model. See `Examples`.
 5484:     parameters: dict
 5485:         A dictionary containing the model parameters.
 5486:         All parameters can be float if not age-dependent, and np.array(M,) if age-dependent
 5487:     testRate: python function
 5488:         number of tests per day and age group
 5489:     M: int
 5490:         Number of age groups.
 5491:     fi: np.array(M) or list
 5492:         Fraction of each age group.
 5493:     Omega: int
 5494:         Total population.
 5495:     steps: int, optional
 5496:         The number of internal integration steps performed between the observed points (not used in tangent space inference).
 5497:         For robustness, set steps to be large, lyapunov_method='LSODA'.
 5498:         For speed, set steps to be small (~4), lyapunov_method='euler'.
 5499:         For a combination of the two, choose something in between.
 5500:     det_method: str, optional
 5501:         The integration method used for deterministic integration.
 5502:         Choose one of 'LSODA' and 'RK45'. Default is 'LSODA'.
 5503:     lyapunov_method: str, optional
 5504:         The integration method used for the integration of the Lyapunov equation for the covariance.
 5505:         Choose one of 'LSODA', 'RK45', 'RK2', 'RK4' and 'euler'. Default is 'LSODA'.
 5506:     rtol_det: float, optional
 5507:         relative tolerance for the deterministic integrator (default 1e-3)
 5508:     rtol_lyapunov: float, optional
 5509:         relative tolerance for the Lyapunov-type integrator (default 1e-3)
 5510:     max_steps_det: int, optional
 5511:         Maximum number of integration steps (total) for the deterministic integrator. Default: unlimited (represented as 0)
 5512:         Parameters for which the integrator reaches max_steps_det are disregarded by the optimiser.
 5513:     max_steps_lyapunov: int, optional
 5514:         Maximum number of integration steps (total) for the Lyapunov-type integrator. Default: unlimited (represented as 0)
 5515:         Parameters for which the integrator reaches max_steps_lyapunov are disregarded by the optimiser.
 5516:     parameter_mapping: python function, optional
 5517:         A user-defined function that maps the dictionary the parameters used for inference to a dictionary of parameters used in model_spec. Default is an identical mapping.
 5518:     time_dep_param_mapping: python function, optional
 5519:         As parameter_mapping, but time-dependent. The user-defined function takes time as a second argument.
 5520: 
 5521:     See `SIR_type` for a table of all the methods
 5522: 
 5523:     Examples
 5524:     --------
 5525:     An example of model_spec and parameters for SIR class with random
 5526:     testing (without false positives/negatives) and quarantine
 5527: 
 5528:     >>> model_spec = {
 5529:             "classes" : ["S", "I"],
 5530:             "S" : {
 5531:                 "infection" : [ ["I", "-beta"] ]
 5532:             },
 5533:             "I" : {
 5534:                 "linear"    : [ ["I", "-gamma"] ],
 5535:                 "infection" : [ ["I", "beta"] ]
 5536:             },
 5537:             "test_pos"  : [ "p_falsepos", "p_truepos", "p_falsepos"] ,
 5538:             "test_freq" : [ "tf", "tf", "tf"]
 5539:         }
 5540:     >>> parameters = {
 5541:             'beta': 0.1,
 5542:             'gamma': 0.1,
 5543:             'p_falsepos': 0
 5544:             'p_truepos': 1
 5545:             'tf': 1
 5546:         }
 5547:     """
 5548:     cdef:
+5549:         readonly dict full_model_spec
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_4SppQ_15full_model_spec_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_4SppQ_15full_model_spec_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_4SppQ_15full_model_spec___get__(((struct __pyx_obj_6pyross_9inference_SppQ *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_4SppQ_15full_model_spec___get__(struct __pyx_obj_6pyross_9inference_SppQ *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->full_model_spec);
  __pyx_r = __pyx_v_self->full_model_spec;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+5550:         readonly object input_time_dep_param_mapping
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_4SppQ_28input_time_dep_param_mapping_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_4SppQ_28input_time_dep_param_mapping_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_4SppQ_28input_time_dep_param_mapping___get__(((struct __pyx_obj_6pyross_9inference_SppQ *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_4SppQ_28input_time_dep_param_mapping___get__(struct __pyx_obj_6pyross_9inference_SppQ *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->input_time_dep_param_mapping);
  __pyx_r = __pyx_v_self->input_time_dep_param_mapping;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+5551:         readonly object input_param_mapping
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_4SppQ_19input_param_mapping_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_4SppQ_19input_param_mapping_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_4SppQ_19input_param_mapping___get__(((struct __pyx_obj_6pyross_9inference_SppQ *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_4SppQ_19input_param_mapping___get__(struct __pyx_obj_6pyross_9inference_SppQ *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->input_param_mapping);
  __pyx_r = __pyx_v_self->input_param_mapping;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+5552:         readonly object testRate
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_4SppQ_8testRate_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_4SppQ_8testRate_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_4SppQ_8testRate___get__(((struct __pyx_obj_6pyross_9inference_SppQ *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_4SppQ_8testRate___get__(struct __pyx_obj_6pyross_9inference_SppQ *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->testRate);
  __pyx_r = __pyx_v_self->testRate;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5553: 
+5554:     def __init__(self, model_spec, parameters, testRate, M, fi, Omega=1, steps=4,
/* Python wrapper */
static int __pyx_pw_6pyross_9inference_4SppQ_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6pyross_9inference_4SppQ_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_model_spec = 0;
  PyObject *__pyx_v_parameters = 0;
  PyObject *__pyx_v_testRate = 0;
  PyObject *__pyx_v_M = 0;
  PyObject *__pyx_v_fi = 0;
  PyObject *__pyx_v_Omega = 0;
  PyObject *__pyx_v_steps = 0;
  PyObject *__pyx_v_det_method = 0;
  PyObject *__pyx_v_lyapunov_method = 0;
  PyObject *__pyx_v_rtol_det = 0;
  PyObject *__pyx_v_rtol_lyapunov = 0;
  PyObject *__pyx_v_max_steps_det = 0;
  PyObject *__pyx_v_max_steps_lyapunov = 0;
  PyObject *__pyx_v_parameter_mapping = 0;
  PyObject *__pyx_v_time_dep_param_mapping = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_model_spec,&__pyx_n_s_parameters,&__pyx_n_s_testRate,&__pyx_n_s_M,&__pyx_n_s_fi,&__pyx_n_s_Omega,&__pyx_n_s_steps,&__pyx_n_s_det_method,&__pyx_n_s_lyapunov_method,&__pyx_n_s_rtol_det,&__pyx_n_s_rtol_lyapunov,&__pyx_n_s_max_steps_det,&__pyx_n_s_max_steps_lyapunov,&__pyx_n_s_parameter_mapping,&__pyx_n_s_time_dep_param_mapping,0};
    PyObject* values[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[5] = ((PyObject *)__pyx_int_1);
    values[6] = ((PyObject *)__pyx_int_4);
    values[7] = ((PyObject *)__pyx_n_u_LSODA);
    values[8] = ((PyObject *)__pyx_n_u_LSODA);
    values[9] = ((PyObject *)__pyx_float_1eneg_3);
    values[10] = ((PyObject *)__pyx_float_1eneg_3);
    values[11] = ((PyObject *)__pyx_int_0);
    values[12] = ((PyObject *)__pyx_int_0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6pyross_9inference_4SppQ___init__(struct __pyx_obj_6pyross_9inference_SppQ *__pyx_v_self, PyObject *__pyx_v_model_spec, PyObject *__pyx_v_parameters, PyObject *__pyx_v_testRate, PyObject *__pyx_v_M, PyObject *__pyx_v_fi, PyObject *__pyx_v_Omega, PyObject *__pyx_v_steps, PyObject *__pyx_v_det_method, PyObject *__pyx_v_lyapunov_method, PyObject *__pyx_v_rtol_det, PyObject *__pyx_v_rtol_lyapunov, PyObject *__pyx_v_max_steps_det, PyObject *__pyx_v_max_steps_lyapunov, PyObject *__pyx_v_parameter_mapping, PyObject *__pyx_v_time_dep_param_mapping) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyross.inference.SppQ.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+5555:                                     det_method='LSODA', lyapunov_method='LSODA', rtol_det=1e-3, rtol_lyapunov=1e-3, max_steps_det=0, max_steps_lyapunov=0, parameter_mapping=None, time_dep_param_mapping=None):
    values[13] = ((PyObject *)Py_None);
    values[14] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_model_spec)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_parameters)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 5, 15, 1); __PYX_ERR(0, 5554, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_testRate)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 5, 15, 2); __PYX_ERR(0, 5554, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 5, 15, 3); __PYX_ERR(0, 5554, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fi)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 5, 15, 4); __PYX_ERR(0, 5554, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Omega);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_steps);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_det_method);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lyapunov_method);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol_det);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rtol_lyapunov);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps_det);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_steps_lyapunov);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_parameter_mapping);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_time_dep_param_mapping);
          if (value) { values[14] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 5554, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_model_spec = values[0];
    __pyx_v_parameters = values[1];
    __pyx_v_testRate = values[2];
    __pyx_v_M = values[3];
    __pyx_v_fi = values[4];
    __pyx_v_Omega = values[5];
    __pyx_v_steps = values[6];
    __pyx_v_det_method = values[7];
    __pyx_v_lyapunov_method = values[8];
    __pyx_v_rtol_det = values[9];
    __pyx_v_rtol_lyapunov = values[10];
    __pyx_v_max_steps_det = values[11];
    __pyx_v_max_steps_lyapunov = values[12];
    __pyx_v_parameter_mapping = values[13];
    __pyx_v_time_dep_param_mapping = values[14];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 5, 15, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5554, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SppQ.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_4SppQ___init__(((struct __pyx_obj_6pyross_9inference_SppQ *)__pyx_v_self), __pyx_v_model_spec, __pyx_v_parameters, __pyx_v_testRate, __pyx_v_M, __pyx_v_fi, __pyx_v_Omega, __pyx_v_steps, __pyx_v_det_method, __pyx_v_lyapunov_method, __pyx_v_rtol_det, __pyx_v_rtol_lyapunov, __pyx_v_max_steps_det, __pyx_v_max_steps_lyapunov, __pyx_v_parameter_mapping, __pyx_v_time_dep_param_mapping);
+5556:         if parameter_mapping is not None and time_dep_param_mapping is not None:
  __pyx_t_2 = (__pyx_v_parameter_mapping != Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_v_time_dep_param_mapping != Py_None);
  __pyx_t_2 = (__pyx_t_3 != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+5557:             raise Exception('Specify either parameter_mapping or time_dep_param_mapping')
    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__44, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(0, 5557, __pyx_L1_error)
+5558:         self.full_model_spec = pyross.utils.build_SppQ_model_spec(model_spec)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyross); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_utils); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_build_SppQ_model_spec); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_model_spec) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_model_spec);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(PyDict_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 5558, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->full_model_spec);
  __Pyx_DECREF(__pyx_v_self->full_model_spec);
  __pyx_v_self->full_model_spec = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+5559:         self.input_time_dep_param_mapping = time_dep_param_mapping
  __Pyx_INCREF(__pyx_v_time_dep_param_mapping);
  __Pyx_GIVEREF(__pyx_v_time_dep_param_mapping);
  __Pyx_GOTREF(__pyx_v_self->input_time_dep_param_mapping);
  __Pyx_DECREF(__pyx_v_self->input_time_dep_param_mapping);
  __pyx_v_self->input_time_dep_param_mapping = __pyx_v_time_dep_param_mapping;
+5560:         self.input_param_mapping = parameter_mapping
  __Pyx_INCREF(__pyx_v_parameter_mapping);
  __Pyx_GIVEREF(__pyx_v_parameter_mapping);
  __Pyx_GOTREF(__pyx_v_self->input_param_mapping);
  __Pyx_DECREF(__pyx_v_self->input_param_mapping);
  __pyx_v_self->input_param_mapping = __pyx_v_parameter_mapping;
+5561:         self.testRate = testRate
  __Pyx_INCREF(__pyx_v_testRate);
  __Pyx_GIVEREF(__pyx_v_testRate);
  __Pyx_GOTREF(__pyx_v_self->testRate);
  __Pyx_DECREF(__pyx_v_self->testRate);
  __pyx_v_self->testRate = __pyx_v_testRate;
+5562:         super().__init__(self.full_model_spec, parameters, M, fi, Omega, steps,
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5562, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6pyross_9inference_SppQ));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6pyross_9inference_SppQ));
  PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_ptype_6pyross_9inference_SppQ));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_self));
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5562, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_init); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5562, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  __pyx_t_5 = PyTuple_New(12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5562, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_self->full_model_spec);
  __Pyx_GIVEREF(__pyx_v_self->full_model_spec);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_self->full_model_spec);
  __Pyx_INCREF(__pyx_v_parameters);
  __Pyx_GIVEREF(__pyx_v_parameters);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_parameters);
  __Pyx_INCREF(__pyx_v_M);
  __Pyx_GIVEREF(__pyx_v_M);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_M);
  __Pyx_INCREF(__pyx_v_fi);
  __Pyx_GIVEREF(__pyx_v_fi);
  PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_v_fi);
  __Pyx_INCREF(__pyx_v_Omega);
  __Pyx_GIVEREF(__pyx_v_Omega);
  PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_v_Omega);
  __Pyx_INCREF(__pyx_v_steps);
  __Pyx_GIVEREF(__pyx_v_steps);
  PyTuple_SET_ITEM(__pyx_t_5, 5, __pyx_v_steps);
  __Pyx_INCREF(__pyx_v_det_method);
  __Pyx_GIVEREF(__pyx_v_det_method);
  PyTuple_SET_ITEM(__pyx_t_5, 6, __pyx_v_det_method);
  __Pyx_INCREF(__pyx_v_lyapunov_method);
  __Pyx_GIVEREF(__pyx_v_lyapunov_method);
  PyTuple_SET_ITEM(__pyx_t_5, 7, __pyx_v_lyapunov_method);
  __Pyx_INCREF(__pyx_v_rtol_det);
  __Pyx_GIVEREF(__pyx_v_rtol_det);
  PyTuple_SET_ITEM(__pyx_t_5, 8, __pyx_v_rtol_det);
  __Pyx_INCREF(__pyx_v_rtol_lyapunov);
  __Pyx_GIVEREF(__pyx_v_rtol_lyapunov);
  PyTuple_SET_ITEM(__pyx_t_5, 9, __pyx_v_rtol_lyapunov);
  __Pyx_INCREF(__pyx_v_max_steps_det);
  __Pyx_GIVEREF(__pyx_v_max_steps_det);
  PyTuple_SET_ITEM(__pyx_t_5, 10, __pyx_v_max_steps_det);
  __Pyx_INCREF(__pyx_v_max_steps_lyapunov);
  __Pyx_GIVEREF(__pyx_v_max_steps_lyapunov);
  PyTuple_SET_ITEM(__pyx_t_5, 11, __pyx_v_max_steps_lyapunov);
/* … */
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5562, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+5563:                                     det_method, lyapunov_method, rtol_det, rtol_lyapunov, max_steps_det, max_steps_lyapunov, parameter_mapping=None, time_dep_param_mapping=self.full_time_dep_param_mapping)
  __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_parameter_mapping, Py_None) < 0) __PYX_ERR(0, 5563, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_full_time_dep_param_mapping); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_time_dep_param_mapping, __pyx_t_7) < 0) __PYX_ERR(0, 5563, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 5564: 
 5565: 
+5566:     cpdef full_time_dep_param_mapping(self, input_parameters, t):
static PyObject *__pyx_pw_6pyross_9inference_4SppQ_3full_time_dep_param_mapping(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6pyross_9inference_4SppQ_full_time_dep_param_mapping(struct __pyx_obj_6pyross_9inference_SppQ *__pyx_v_self, PyObject *__pyx_v_input_parameters, PyObject *__pyx_v_t, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_output_param_dict = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("full_time_dep_param_mapping", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_full_time_dep_param_mapping); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5566, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_6pyross_9inference_4SppQ_3full_time_dep_param_mapping)) {
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_5 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_3)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_input_parameters, __pyx_v_t};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5566, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_input_parameters, __pyx_v_t};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5566, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        {
          __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5566, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (__pyx_t_4) {
            __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
          }
          __Pyx_INCREF(__pyx_v_input_parameters);
          __Pyx_GIVEREF(__pyx_v_input_parameters);
          PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_input_parameters);
          __Pyx_INCREF(__pyx_v_t);
          __Pyx_GIVEREF(__pyx_v_t);
          PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_t);
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5566, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pyross.inference.SppQ.full_time_dep_param_mapping", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_output_param_dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_4SppQ_3full_time_dep_param_mapping(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_4SppQ_3full_time_dep_param_mapping(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_input_parameters = 0;
  PyObject *__pyx_v_t = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("full_time_dep_param_mapping (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_input_parameters,&__pyx_n_s_t,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_input_parameters)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("full_time_dep_param_mapping", 1, 2, 2, 1); __PYX_ERR(0, 5566, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "full_time_dep_param_mapping") < 0)) __PYX_ERR(0, 5566, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_input_parameters = values[0];
    __pyx_v_t = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("full_time_dep_param_mapping", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5566, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyross.inference.SppQ.full_time_dep_param_mapping", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pyross_9inference_4SppQ_2full_time_dep_param_mapping(((struct __pyx_obj_6pyross_9inference_SppQ *)__pyx_v_self), __pyx_v_input_parameters, __pyx_v_t);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_4SppQ_2full_time_dep_param_mapping(struct __pyx_obj_6pyross_9inference_SppQ *__pyx_v_self, PyObject *__pyx_v_input_parameters, PyObject *__pyx_v_t) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("full_time_dep_param_mapping", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6pyross_9inference_4SppQ_full_time_dep_param_mapping(__pyx_v_self, __pyx_v_input_parameters, __pyx_v_t, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5566, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyross.inference.SppQ.full_time_dep_param_mapping", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5567:         cdef dict output_param_dict
+5568:         if self.input_time_dep_param_mapping is not None:
  __pyx_t_7 = (__pyx_v_self->input_time_dep_param_mapping != Py_None);
  __pyx_t_8 = (__pyx_t_7 != 0);
  if (__pyx_t_8) {
/* … */
    goto __pyx_L3;
  }
+5569:             output_param_dict = self.input_time_dep_param_mapping(input_parameters, t).copy()
    __Pyx_INCREF(__pyx_v_self->input_time_dep_param_mapping);
    __pyx_t_3 = __pyx_v_self->input_time_dep_param_mapping; __pyx_t_6 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_5 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_input_parameters, __pyx_v_t};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5569, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_input_parameters, __pyx_v_t};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5569, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_2);
    } else
    #endif
    {
      __pyx_t_4 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5569, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (__pyx_t_6) {
        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6); __pyx_t_6 = NULL;
      }
      __Pyx_INCREF(__pyx_v_input_parameters);
      __Pyx_GIVEREF(__pyx_v_input_parameters);
      PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_5, __pyx_v_input_parameters);
      __Pyx_INCREF(__pyx_v_t);
      __Pyx_GIVEREF(__pyx_v_t);
      PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_5, __pyx_v_t);
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5569, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5569, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5569, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 5569, __pyx_L1_error)
    __pyx_v_output_param_dict = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
+5570:         elif self.input_param_mapping is not None:
  __pyx_t_8 = (__pyx_v_self->input_param_mapping != Py_None);
  __pyx_t_7 = (__pyx_t_8 != 0);
  if (__pyx_t_7) {
/* … */
    goto __pyx_L3;
  }
+5571:             output_param_dict = self.input_param_mapping(input_parameters).copy()
    __Pyx_INCREF(__pyx_v_self->input_param_mapping);
    __pyx_t_2 = __pyx_v_self->input_param_mapping; __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v_input_parameters) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_input_parameters);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5571, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5571, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5571, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 5571, __pyx_L1_error)
    __pyx_v_output_param_dict = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
 5572:         else:
+5573:             output_param_dict = input_parameters.copy()
  /*else*/ {
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_parameters, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5573, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5573, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 5573, __pyx_L1_error)
    __pyx_v_output_param_dict = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
  }
  __pyx_L3:;
+5574:         if self.testRate is not None:
  __pyx_t_7 = (__pyx_v_self->testRate != Py_None);
  __pyx_t_8 = (__pyx_t_7 != 0);
  if (__pyx_t_8) {
/* … */
    goto __pyx_L4;
  }
+5575:             output_param_dict['tau'] = self.testRate(t)
    __Pyx_INCREF(__pyx_v_self->testRate);
    __pyx_t_2 = __pyx_v_self->testRate; __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_t) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_t);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5575, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(__pyx_v_output_param_dict == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 5575, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__pyx_v_output_param_dict, __pyx_n_u_tau, __pyx_t_1) < 0)) __PYX_ERR(0, 5575, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 5576:         else:
+5577:             output_param_dict['tau'] = 0
  /*else*/ {
    if (unlikely(__pyx_v_output_param_dict == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 5577, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__pyx_v_output_param_dict, __pyx_n_u_tau, __pyx_int_0) < 0)) __PYX_ERR(0, 5577, __pyx_L1_error)
  }
  __pyx_L4:;
+5578:         return output_param_dict
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_output_param_dict);
  __pyx_r = __pyx_v_output_param_dict;
  goto __pyx_L0;
 5579: 
+5580:     def set_testRate(self, testRate):
/* Python wrapper */
static PyObject *__pyx_pw_6pyross_9inference_4SppQ_5set_testRate(PyObject *__pyx_v_self, PyObject *__pyx_v_testRate); /*proto*/
static PyObject *__pyx_pw_6pyross_9inference_4SppQ_5set_testRate(PyObject *__pyx_v_self, PyObject *__pyx_v_testRate) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_testRate (wrapper)", 0);
  __pyx_r = __pyx_pf_6pyross_9inference_4SppQ_4set_testRate(((struct __pyx_obj_6pyross_9inference_SppQ *)__pyx_v_self), ((PyObject *)__pyx_v_testRate));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6pyross_9inference_4SppQ_4set_testRate(struct __pyx_obj_6pyross_9inference_SppQ *__pyx_v_self, PyObject *__pyx_v_testRate) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_testRate", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyross.inference.SppQ.set_testRate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+5581:         self.testRate = testRate
  __Pyx_INCREF(__pyx_v_testRate);
  __Pyx_GIVEREF(__pyx_v_testRate);
  __Pyx_GOTREF(__pyx_v_self->testRate);
  __Pyx_DECREF(__pyx_v_self->testRate);
  __pyx_v_self->testRate = __pyx_v_testRate;
+5582:         self.set_det_model(self.param_dict)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_det_model); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5582, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_self->__pyx_base.__pyx_base.param_dict) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_self->__pyx_base.__pyx_base.param_dict);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5582, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 5583: